在命令行中设置 Json 对象而不是 AWS-SAM 上的 event.json

问题描述 投票:0回答:3

通常

我可以使用此功能

SAM

sam local invoke "MessageFunction" -e events/message.json

但是我想在命令行中设置 event.json 的内容

所以,我尝试了这个,但没有成功。

echo '{"type": "Message", "user_id": 5 }' | sam local invoke "MessageFunction" 

有什么办法可以做到这一点吗?

amazon-web-services aws-lambda aws-sam
3个回答
1
投票

所以我尝试了管道,它似乎在抱怨额外的参数。

-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
    标志
  • 课程结束后清洁

1
投票

根据doc

要从 stdin 输入 JSON,必须传入值“-”。

你可以做类似的事情

echo '{"type": "Message", "user_id": 5 }' | sam local invoke "MessageFunction"  -e -

0
投票

下面是我的示例 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 中测试您的事件主体,这将有助于理解结构。

© www.soinside.com 2019 - 2024. All rights reserved.