HelloWorld не читает событие из STDIN - PullRequest
1 голос
/ 17 января 2020

Я хочу, чтобы SAM CLI считывал событие из стандартного входа.

С 1 Я должен иметь возможность:

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

Это означает, что я должен иметь возможность вызывать свою лямбду из командной строки, передавая событие в STDIN для sam local invoke

Хорошо, возьмем это, например:

# 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?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

С выпуском 31 aws -sam они изменили синтаксис для чтения события из stdin. Теперь вам нужно сделать это следующим образом:

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

0 голосов
/ 17 января 2020

Одним из «решений» является просто добавление дополнительного промежуточного шага использования -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':...
...