通常
我可以使用此功能
SAM
sam local invoke "MessageFunction" -e events/message.json
但是我想在命令行中设置 event.json 的内容
所以,我尝试了这个,但没有成功。
echo '{"type": "Message", "user_id": 5 }' | sam local invoke "MessageFunction"
有什么办法可以做到这一点吗?
所以我尝试了管道,它似乎在抱怨额外的参数。
-e
标志需要文件路径作为输入。所以回答你的问题,以我的能力看来是不可行的。但是,您可能需要考虑使用以下命令在临时文件上传输事件:
sam_tmp=$(mktemp)
echo '{"type": "Message", "user_id": 5 }' >> "$sam_tmp"
sam local invoke "MessageFunction" -e $sam_tmp
rm $sam_tmp
看起来真的很脏,但它完成了工作:D 逻辑是:
mktemp
-e
标志根据doc,
要从 stdin 输入 JSON,必须传入值“-”。
你可以做类似的事情
echo '{"type": "Message", "user_id": 5 }' | sam local invoke "MessageFunction" -e -
下面是我的示例 API 的工作方法,它调用接受主体的 Lambda
CreateBookLambda
{
"title": "AWS SAM Create Event",
"author": "It worked for sure"
}
创建一个文件。 create_book_event
并放入以下内容
{ "body": "{\"title\": \"AWS SAM Create Event\",\n \"author\": \"It worked for sure\"}"}
sam local invoke CreateBookLambda -t ./cdk.out/CdkProjectStack.template.json -e create_book_event.json
它按预期工作。
提示:在 AWS 控制台的 Lambda 中测试您的事件主体,这将有助于理解结构。