gpt4 book ai didi

python-3.x - 使用 boto3 和 python3,我无法对 ClientContext 的 JSON 进行 Base64 编码?

转载 作者:行者123 更新时间:2023-12-02 20:26:26 24 4
gpt4 key购买 nike

在使用 lambda 时,文档表示您必须为 ClientContext 发送一个 base64 编码的 JSON 对象。它还表示客户端上下文必须是“str”而不是字节。

http://boto3.readthedocs.io/en/latest/reference/services/lambda.html#Lambda.Client.invoke

由于 python3 的 base64 库现在使用字节而不是字符串进行编码 - 这似乎难倒了我。

import boto3
import base64

CLIENT = boto3.client('lambda')

client_context = b'{ "client_name": "Andy"}'
encoded_context = base64.b64encode(client_context)
CLIENT.invoke(
FunctionName='testFunction',
InvocationType='RequestResponse',
LogType='Tail',
ClientContext=encoded_context
)

我得到的错误是: Invalid type for parameter ClientContext, value: b'eyAiY2xpZW50X25hbWUiOiJGUkVFSFVCIiB9', type: <class 'bytes'>, valid types: <class 'str'>

或者当我设置str(encoded_context)时: botocore.errorfactory.InvalidRequestContentException: An error occurred (InvalidRequestContentException) when calling the Invoke operation: Client context must be a valid Base64-encoded JSON object.

提前致谢。

最佳答案

下面的代码是通过 boto3 传递客户端上下文的示例。

import boto3
import base64
import json

client = boto3.client("lambda")


def lambda_context(custom=None,
env=None,
client=None):
client_context = dict(
custom=custom,
env=env,
client=client)
json_context = json.dumps(client_context).encode('utf-8')
return base64.b64encode(json_context).decode('utf-8')

context = {
"custom": {"foo": "bar"},
"env": {"test": "test"},
"client": {}
}

client.invoke(FunctionName="<YOUR_LAMBDA_FUNCTIONS>",
ClientContext=lambda_context(**context),
Payload=YOUR_PAYLOAD)

请注意,客户端上下文字典对象中的 envcustom 可以是任何内容。对于客户端,只能接受以下 key :

app_version_name
app_title
app_version_code
app_package_name
installation_id

顺便说一句,如果您的 lambda 函数是用 Python 实现的。客户端上下文对象可以被称为context.client_context。 env(context.cilent_context.env) 和 custom(context.client_context.custom) 是两个 dict 对象。如果 envcustomclient 中的任何一个未从 boto3 的调用方法传递,则 context.client_context 将是 None

关于python-3.x - 使用 boto3 和 python3,我无法对 ClientContext 的 JSON 进行 Base64 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46095064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com