Amazon AWS CLI不允许在有效负载参数中使用有效JSON

eulz3vhy  于 2023-01-10  发布在  其他
关注(0)|答案(6)|浏览(167)

我尝试从AWS CLI调用lambda函数时遇到错误。我使用的是第2版CLI。我知道应该将--payload参数作为包含JSON对象的字符串传递。

aws lambda invoke --function-name testsms  --invocation-type Event --payload '{"key": "test"}' response.json

出现以下错误:

Invalid base64: "{"key": "test"}"

我尝试了JSON转义字符等的各种变体。我还尝试使用file://test.json选项,我收到了同样的错误。

fkvaft9z

fkvaft9z1#

正如@MCI所说,AWS V2默认为base 64输入。要使您的情况正常工作,只需在命令中添加一个--cli-binary-format raw-in-base64-out参数,

aws lambda invoke --function-name testsms \
    --invocation-type Event \
    --cli-binary-format raw-in-base64-out \
    --payload '{"key": "test"}' response.json
kkbh8khc

kkbh8khc2#

看起来awscli v2要求一些参数是base64编码的。
默认情况下,AWS CLI版本2现在将所有二进制输入和二进制输出参数作为base64编码字符串传递。需要二进制输入的参数在文档中将其类型指定为blob(二进制大对象)。
payload parameterlamba invoke是这些blob类型之一,必须采用base64编码。
--payload(blob)您希望提供给Lambda函数作为输入的JSON。
一个解决方案是使用opensslbase 64来编码你的有效载荷。

echo '{"key": "test"}' > clear_payload  
openssl base64 -out encoded_payload -in clear_payload
aws lambda invoke --function-name testsms  --invocation-type Event --payload file://~/encoded_payload response.json
mi7gmzs6

mi7gmzs63#

首先,字符串是一个有效的JSON。
在我的情况下,我有这个问题

$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "Just Checking If Everything is OK" out

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Could not parse payload into json: Unrecognized token 'Just': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"Just Checking If Everything is OK"; line: 1, column: 6]

结果发现问题是由于AWS CLI试图将其转换为JSON。

$ aws --profile diegosasw lambda invoke --function-name lambda-dotnet-function --payload "\"Just Checking If Everything is OK\"" out
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
vhmi4jdf

vhmi4jdf4#

这个解决方案对我很有效,我发现它比每次都要记住/检查手册页中的正确标志要简单。

aws lambda invoke --function-name my_func --payload $(echo "{\"foo\":\"bar\"}" | base64) out
x7rlezfr

x7rlezfr5#

在Windows中,我尝试了以下方法,效果很好

aws lambda invoke --function-name testsms  --invocation-type Event --cli-binary-format raw-in-base64-out --payload {\"key\": \"test\"} response.json

请注意,在命令中添加了--cli-binary-format raw-in-base64-out,并在有效负载中转义了“to

y3bcpkx1

y3bcpkx16#

在运行LocalStack的Windows PowerShell上,我必须用途:

--payload '{\"key\": \"test\"}' response.json

相关问题