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

Rog*_*ort 49 json amazon-web-services

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

aws lambda invoke --function-name testsms  --invocation-type Event --payload '{"key": "test"}' response.json 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Invalid base64: "{"key": "test"}"
Run Code Online (Sandbox Code Playgroud)

我已经为 JSON 转义字符等尝试了各种变体。我也尝试使用file://test.json我收到相同错误的选项。

ssg*_*gao 95

正如@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
Run Code Online (Sandbox Code Playgroud)


小智 24

看起来awscli v2需要一些参数是 base64 编码的。

默认情况下,AWS CLI 版本 2 现在将所有二进制输入和二进制输出参数作为 base64 编码字符串传递。需要二进制输入的参数在文档中将其类型指定为 blob(二进制大对象)。

有效载荷参数lamba invoke为这些中的一个blob类型必须是base64编码。

--payload (blob) 您要作为输入提供给 Lambda 函数的 JSON。

一种解决方案是使用 openssl base64 对您的有效负载进行编码。

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_paylaod response.json
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我认为我自己无法解决这个问题。 (2认同)
  • 感谢 aws 让您的复杂系统变得更加复杂 (2认同)