Как указать параметры шаблона при запуске AWS SAM Local?
Используя AWS SAM Local, я могу локально протестировать свое безсерверное приложение, и это здорово.
Я также могу развернуть на AWS, который, очевидно, принимает те же флаги, что и aws cloudformation deploy
поэтому я могу передать файл параметров, например, с секретами приложения (ключами API и т. д.).
Тем не менее, я ничего не могу найти в aws local start-api --help
или в документации на Github о том, как использовать файл параметров при локальном тестировании.
Как мне указать файл параметров для использования с моим шаблоном при запуске sam local start-api
?
2 ответа
Согласно исходному коду вы можете пройти --parameter-values
, Анализатор параметров предполагает, что синтаксис выглядит примерно так:
sam local start-api --parameter-values ParameterKey=param1,ParameterValue=value1 ParameterKey=param2,ParameterValue=value2
Этот синтаксис используется в их тестах. Это также соответствует aws cloudformation deploy --parameter-overrides
( ссылка), так что подходит.
И последнее, но не менее важное: в нем есть текст справки, поэтому я не уверен, почему он не будет отображаться при использовании --help
, Возможно, стоит сообщить об ошибке, если она не появилась.
Вы можете использовать --parameter-overrides в sam deploy так же, как в aws cloudformation deploy с небольшим изменением:
До:
sam deploy --template-file packaged.yaml --stack-name example-lambda --capabilities CAPABILITY_IAM --parameter-overrides ParameterKey=SourceS3Bucket ParameterValue=test-data-111
После:
sam deploy --template-file packaged.yaml --stack-name example-lambda --capabilities CAPABILITY_IAM --parameter-overrides SourceS3Bucket=test-data-111
Заметное изменение: ParameterKey, ParameterValue не нужно явно указывать в sam deploy. Помогает мне в локальном тестировании.
Надеюсь, это поможет.:)
Кажется, вы также можете использовать -n
или же --env-vars
параметр для передачи переменных среды в файле JSON вашим функциям. См. Документы: локально тестируйте свои серверные приложения с помощью SAM CLI (общедоступная бета-версия)
Короче говоря, ваш JSON-файл будет выглядеть так (пример скопирован из документации):
{
"MyFunction1": {
"TABLE_NAME": "localtable",
"BUCKET_NAME": "testBucket"
},
"MyFunction2": {
"TABLE_NAME": "localtable",
"STAGE": "dev"
},
}
И тогда вы можете сделать:
$ sam local start-api --env-vars env.json
Это специально для переменных среды для ваших лямбда-функций, так что, возможно, это не совсем то, что вы ищете?
Мой странный опыт заключался в том, что это зависит от порядка параметров. У меня было два параметра - SecretKey и DatabaseUri, указывающие на экземпляр Mongo. Когда у меня сначала был DatabaseUri, SecretKey не был загружен, и сборка завершилась неудачно из-за отсутствия параметра SecretKey. Когда я был действительно в отчаянии, я сначала поменял местами параметры с SecretKey, и он начал работать!