aws cli lambda - 无法将请求正文解析为 json

问题描述 投票:0回答:4

我已经在 .net core 中创建了 aws lambda 函数并进行了部署。 我尝试在 aws 控制台中使用测试用例执行函数及其工作。但我无法使用 cli 命令实现相同的目标

aws lambda invoke --function-name "mylambda" --log-type Tail --payload file://D:/Files/lamdainputfile.json file://D:/Files/response.txt

我在使用 cli 命令时遇到错误

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unexpected character ((CTRL-CHAR, code 138)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (byte[])"�zn�]t�zn�m�"; line: 1, column: 2]

我尝试传递json

aws lambda invoke --function-name "mylambda" --log-type Tail --payload "{'input1':'100', 'input2':'200'}" file://D:/Files/response.txt

但它不起作用

此 lambda 函数正在使用测试用例执行 aws 控制台并给出正确的结果。我在本地 json 文件中添加了相同的输入并尝试使用 cli 命令。

Json 输入:

{
  "input1": "100",
  "input2": "200"
}

编辑:

在内联 json 中更正后,我收到输出文件错误

Unknown options: file://D:/Files/response.txt

是否有任何命令可以仅在 cli 中打印输出?

json amazon-web-services .net-core aws-lambda aws-cli
4个回答
23
投票

添加选项

--cli-binary-format raw-in-base64-out
将允许您在调用命令中传递原始 json。

aws lambda invoke \
    --cli-binary-format raw-in-base64-out \
    --function-name "mylambda" \
    --payload '{"input1": "100", "input2": "200"}' \
    file://D:/Files/response.txt

22
投票

该文档未从 cli 版本 1 更新。对于 aws cli 版本 2,我们需要对有效负载进行 Base64 编码。

麦克:

payload=`echo '{"input1": 100, "input2": 200 }' | openssl base64`
aws lambda invoke --function-name myfunction --payload "$payload" SomeOutFile &

2
投票

基于 ASW CLI 调用命令选项

--payload
仅接受内联 blob 参数(即 JSON)。换句话说,
--payload
参数不能用于从文件中读取输入,因此
--payload file://D:/Files/lamdainputfile.json
将不起作用。

在示例中,可能发生的情况是

--payload
被忽略,
file://D:/Files/lamdainputfile.json
被视为
<outfile>
,并且
file://D:/Files/response.txt
会引发错误,因为它是意外的位置参数。 需要的是使用单独的命令读取
D:/Files/lamdainputfile.json
的内容。根据所使用的 shell 类型,完成此操作的方式也有所不同。重击示例:

aws lambda invoke --payload "$(cat /path/to/input.json)" ...

原答案:

我不知道第一种情况(

--payload file:///...
),但是第二种情况不是有效的 JSON,因为 JSON 要求字符串用双引号引起来。尝试以下 JSON:

{
    "input": "100",
    "input2": "200"
}

0
投票

根据您使用的 aws cli 版本(v1 与 v2),您需要考虑 cli-binary-format 选项及其默认值:

用于二进制 blob 的格式化样式。默认格式是base64。 Base64 格式期望以 Base64 编码字符串的形式提供二进制 blob。 raw-in-base64-out 格式保留了与 AWS CLI V1 行为的兼容性,并且二进制值必须按字面传递。当提供映射到二进制 blob fileb:// 的文件内容时,将始终将其视为二进制文件并直接使用文件内容,无论 cli-binary-format 设置如何。使用 file:// 时,文件内容需要根据配置的 cli-binary-format 正确格式化。

文档:https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html

© www.soinside.com 2019 - 2024. All rights reserved.