我已经在 .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 中打印输出?
添加选项
--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
该文档未从 cli 版本 1 更新。对于 aws cli 版本 2,我们需要对有效负载进行 Base64 编码。
麦克:
payload=`echo '{"input1": 100, "input2": 200 }' | openssl base64`
aws lambda invoke --function-name myfunction --payload "$payload" SomeOutFile &
--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"
}
根据您使用的 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