HelloWorld 未从 STDIN 读取事件

HelloWorld not reading event from STDIN

我想让 SAM CLI 从标准输入中读取事件。

1 我应该能够:

sam local generate-event s3 [put/delete] --bucket <bucket> --key <key> | sam local invoke <function logical id>

这意味着我应该能够通过将事件输送到 sam local invoke

的 STDIN 来从命令行调用我的 lambda

嗯,举个例子:

# CREATE A HELLO_WORLD SAM PROJECT
sam init \
  --no-interactive \
  --name sam-read-stdin \
  --runtime python3.7 \
  --dependency-manager pip \
  --app-template hello-world

cd sam-read-stdin

# FORCE THE LAMBDA TO PRINT THE EVENT
sed 's/#     raise e/print\("EVENT %s" % event\)/' -i hello_world/app.py

# BUILD INSIDE DOCKER CONTAINER
sam build --use-container

# INVOKE USING THE STDIN PIPE
sam local generate-event apigateway aws-proxy | \
  sam local invoke HelloWorldFunction

# ALWAYS PRINTS THIS RESULT
# EVENT {}

我需要做什么才能让打印输出 EVENT {} 变成 sam local generate-event

提前致谢!

一个 "solution" 是添加一个额外的中间步骤,使用 -e <event.json>:

sam local generate-event apigateway aws-proxy > test-event.json

sam local invoke HelloWorldFunction -e test-event.json

rm test-event.json

# THIS WORKS THE WAY I WANT STDIN TO WORK
# EVENT {'body': 'eyJ0ZXN0IjoiYm9keSJ9', 'resource':...

在 aws-sam 的第 31 版中,他们更改了从标准输入读取事件的语法。您现在需要这样做:

sam local generate-event s3 [put/delete] --bucket <bucket> --key <key> | sam local invoke <function logical id> -e -

注意最后的“-e -”。

https://github.com/awslabs/aws-sam-cli/releases/tag/v0.31.0