我创建了一个AWS的lambda函数,我使用Windows的bat脚本来触发。Windows的bat脚本将Windows环境变量USERNAME作为有效载荷的一部分。
我在本地使用下面的语法成功地运行了这个脚本。
aws lambda invoke --function-name ConnectDesktops --payload "{\"Name\": \"%USERNAME%\" }" response.json
然而,我把这个bat文件推送给我的终端用户,他们在执行同样的命令时遇到了错误。
当调用Invoke操作时发生了一个错误(InvalidRequestContentException)。无法将请求体解析为json。意外的字符('©'(代码169))。在[Source.(byte[]) "5.5 "处,预期的空格分隔了根级的值:意外的字符('©'(代码169)):预期的空格分隔了根级的值。(byte[]) "5��F�b��";行:1,列:3]的根级值之间有空格。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
结果都是一样的,或者是类似于
未知选项: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']
任何建议都将是非常感激的。
好了,我找到了答案。
当然,我的安装和我的同事之间必须有一个差异,差异是我们使用的亚马逊CLI的版本。
我使用的是V1版本,上面的命令可以正常工作,但是我的同事使用的是V2版本,在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