lambda 调用 cli 命令以不同方式读取 lambda 负载

lambda evoke cli command reading lambda payload differently

我创建了一个 AWS lambda 函数,我正在使用 Windows bat 脚本触发它。 windows bat 脚本将 windows 环境变量 USERNAME 作为负载的一部分。

我使用以下语法在本地成功运行:

aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"%USERNAME%\" }" response.json

然而,我随后将此 bat 文件推送给我的最终用户,他们在执行相同命令时遇到错误:

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unexpected character ('©' (code 169)): Expected space separating root-level values at [Source: (byte[])"5��F�b����"; line: 1, column: 3]

环境变量正在他们的桌面上解析,但我仍然手动解析它并尝试了一些替代有效负载的方法:

aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"User1\" }" response.json

aws lambda invoke --function-name ConnectDesktops --payload "{"Name": "User1" }" response.json

aws lambda invoke --function-name ConnectDesktops --payload '{"Name": "User1"}' response.json

aws lambda invoke --function-name ConnectDesktops --payload {"Name": "User1"} response.json

所有结果相同或类似

Unknown options: response.json, }'

同样,初始命令实际上在我自己的桌面上运行,我们都使用 Windows 10 和 cmd 命令行工具。

我的 AWS lambda 函数是用 Python 3.8 编写的,并且是这样启动的

import boto3
from botocore.exceptions import ClientError

client=boto3.client('ec2')

def lambda_handler(event, context):

    name=event['Name']

如有任何建议,我们将不胜感激。

好的,我找到了答案。

当然,我的安装与我的同事之间肯定存在差异,差异在于我们使用的 Amazon CLI 版本。

我使用的是 V1,上面的命令运行良好,但我的同事使用的是 V2,您需要在其中添加参数 --cli-binary-format raw-in-base64-out

您可以通过执行以下命令来检查您使用的 CLI 版本: aws --version

完整的 CLI V2 命令供参考: aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"%USERNAME%\" }" --cli-binary-format raw-in-base64-out response.json