Я написал стек SAM и могу собрать, упаковать и развернуть его на AWS. Я также могу использовать start-local или invoke для тестирования. Теперь мне нужно протестировать на других ресурсах AWS. Я добавил эти ресурсы в свой шаблон SAM. Он хорошо работает на AWS, но я ищу способ развернуть свой стек SAM в локальном стеке (например, локальный динамодб). Теперь мне нужно создать ресурсы с помощью интерфейса командной строки, и после этого я могу развернуть свой стек SAM (в данном случае только лямбда, API GW). Как я могу это сделать?
Как развернуть стек SAM с помощью localstack?
Ответы (3)
Я только что прошел через это. Я думаю, что верно следующее.
AWS SAM - это оболочка облачной информации. Итак, ваш шаблон SAM на самом деле является шаблоном Cloudformation. Ваш шаблон Cloudformation определяет ваши лямбда-выражения, динамодб и т. Д. Когда вы развертываете в AWS, все ваши лямбда-выражения и динамодезы переходят в AWS, и вы можете тестировать их в облаке.
Когда вы запускаете AWS SAM локально, вы запускаете свою лямбду локально (в контейнере докеров), но она по-прежнему получает доступ к ресурсам в облаке AWS.
LocalStack имеет интерфейс CloudFormation, поэтому должно быть возможно развернуть файл шаблона CloudFormation. Но я столкнулся с некоторыми проблемами и сдался.
Serverless Framework похожа на AWS SAM в том смысле, что это платформа для разработки вашего безобслуживаемого (лямбда-кода) кода и его развертывания в AWS. Serverless имеет собственную спецификацию yaml для определения стека. Преобразование облачной информации в бессерверный yaml - это немного работы.
Для localstack существует бессерверный плагин. Затем можно развернуть ваш код в localstack. Если у вас есть шлюз API перед вашими лямбдами, тогда будет локальный URL-адрес, который вы можете нажать, который запускает ваши лямбды. Это полностью внутри локального стека и без использования AWS SAM.
На этом этапе вы можете обнаружить, что ваш код по-прежнему попадает в реальные сервисы AWS. Поэтому вам нужно изменить URL-адрес конечной точки, чтобы он указывал локально, как сказал Эндрю А.. Для этого и для того, чтобы ваш код был одинаковым для тестирования и производства, вы можете использовать переменные среды для каждой из конечных точек службы.
Как отмечает Эндрю А., должна быть возможность запускать код с использованием SAM local, который обращается к ресурсам, предоставляемым localstack. Однако может быть предпочтительнее использовать один инструмент, если это было сделано, скажем, в рамках конвейера тестирования.
pip install aws-sam-cli-local
, затем samlocal deploy
- person Michael Armitage; 21.05.2021
После некоторого исследования самый надежный способ -
sam build
иzip
ваш код в.aws-sam/build
$ cd .aws-sam/build
$ zip -qr MyLambda.zip MyLambda
$ tree .aws-sam -L 2
.aws-sam
├── build
│ ├── MyLambda.zip
│ ├── MyLambda
│ └── template.yaml
└── build.toml
2 directories, 3 files
- Разверните заархивированный код в лямбда локального стека, скажем, у меня есть кодовая база nodejs
aws --endpoint-url=http://localhost:4566 lambda create-function \
--function-name "my-lambda" --runtime=nodejs12.x --role dummy \
--zip-file=fileb:.aws-sam/build/MyLambda.zip \
--handler MyLambda/src/index.handler
Создатели Localstack создали легкую оболочку для sam cli. Просто используйте pip для установки samlocal как библиотеки Python на ваш компьютер:
pip install aws-sam-cli-local
Затем вы можете развернуть в локальном стеке, используя samlocal deploy
вместо обычного sam deploy
. Примерно так:
samlocal deploy --stack-name sam-app --capabilities CAPABILITY_IAM --guided
Дополнительные сведения о параметрах, доступных при развертывании Sam, см. В документации здесь.
sam local start-api ...<options>
. Затем в вашем лямбда-коде обратитесь к ресурсам localstack по их локальному адресу, то есть DynamoDB по адресу localhost: 4569. Не следует пытаться развернуть приложение SAM в локальном стеке, это не то, для чего оно предназначено. - person Andrew A.   schedule 05.02.2020aws cloudformation deploy ...
, но, честно говоря, я бы не предлагал использовать localstack, это очень ошибочно. - person Madeo   schedule 19.11.2020