我想通过CLI而不是AWS管理控制台测试lambda函数。 (希望通过制作bash脚本来自动化功能测试)
我已阅读文档:http://docs.aws.amazon.com/cli/latest/reference/lambda/invoke.html
我试图用json事件有效负载调用lambda函数。我的bashcode看起来像这样:
#!/bin/bash
name="arn:aws:lambda:euwest1:100000000000:function:foo"
invoketype="Event"
payload="{'account':'100261334439', 'region':'eu-west-1', 'detail-type':'Scheduled Event', 'source':'aws.events', 'time':'2017-07-16T03:00:00Z', 'id':'178710aa-6871-11e7-b6ef-e9b95183cfc9', 'resources':['arn:aws:events:eu-west-1:100000000000:rule/run_everyday']}"
aws lambda invoke --function-name "$name" --invocation-type "$invoketype" --payload "$payload" testresult.log
我收到错误:
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unexpected character ('a'
(code 97)): was expecting double-quote to start field name at [Source: [B@7ac4c2fa; line: 1, column: 3]
我相信我以错误的格式提供有效负载,但文档没有示例,它只是说数据类型是' blob'。我做了一些搜索,但只找到了BLOB(二进制大对象)的信息,但我很确定这不是文档所指的内容。
我尝试过没有外部双引号并用双引号替换所有单引号,但所有这些都会产生相同的错误。
答案 0 :(得分:1)
有效JSon应具有双引号之间的键和值
因此您应将payload
属性写为
payload='{"account":"100261334439", "region":"eu-west-1", "detail-type":"Scheduled Event", "source":"aws.events", "time":"2017-07-16T03:00:00Z", "id":"178710aa-6871-11e7-b6ef-e9b95183cfc9", "resources":["arn:aws:events:eu-west-1:100000000000:rule/run_everyday"]}'
答案 1 :(得分:0)
正确(正常):$ aws lambda invoke --function-name myFunction --payload '{"key1":"value1"}' outputfile.txt
正确(Windows):aws lambda invoke --function-name myFunction --payload "{""key1"": ""value1""}" outputfile.txt
OP的特定问题已经正确回答;这个答案是为了使那些最终结果与OP稍有不同的人受益。 您使用的是什么操作系统?如果使用的是Windows,那么您很可能会因为单引号和双引号问题而烦恼。
Windows命令行无法理解单引号和双引号 带引号的字符串中的引号必须以两个双引号转义 (“”)。
信用(正常):AWS documentation
信用(Windows):Hail Reddit!