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
我创建了一个 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