使用AWS SAM Local我可以在本地测试我的无服务器应用程序,这很棒。
我还可以deploy to AWS,它显然采用与aws cloudformation deploy
相同的标记,因此我可以传递参数文件,例如应用程序机密(API密钥等)。
但是,我无法在aws local start-api --help
或Github上的文档中找到有关如何在本地测试时使用参数文件的内容。
运行sam local start-api
时,如何指向要与模板一起使用的参数文件?
答案 0 :(得分:9)
根据source code,您可以通过sam local start-api --parameter-values ParameterKey=param1,ParameterValue=value1 ParameterKey=param2,ParameterValue=value2
。 parameters parser表示语法类似于:
aws cloudformation deploy --parameter-overrides
此语法用于tests。它还匹配--help
(ref),因此它适合。
最后但并非最不重要的是,它有help text defined所以我不确定为什么在您使用SocketActor
时它不会显示出来。如果它没有真正显示出来,也许它值得一个错误报告。
答案 1 :(得分:0)
似乎您也可以使用-n
或--env-vars
参数将JSON文件中的环境变量传递给函数。查看文档:{{3}}
简而言之,您的JSON文件看起来像(从文档中复制的示例):
{
"MyFunction1": {
"TABLE_NAME": "localtable",
"BUCKET_NAME": "testBucket"
},
"MyFunction2": {
"TABLE_NAME": "localtable",
"STAGE": "dev"
},
}
然后您可以这样做:
$ sam local start-api --env-vars env.json
这是专门用于lambda函数的环境变量,因此可能不完全是您想要的?
答案 2 :(得分:0)
您可以在sam部署中使用--parameter-overrides,就像在aws cloudformation部署中一样,只需进行少量更改:
之前:
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
值得注意的变化: sam deploy中不需要显式指定ParameterKey,ParameterValue。帮助我进行本地测试。
希望有帮助。 :)
答案 3 :(得分:0)
我的奇怪经历是,它取决于参数的顺序。我有两个参数-SecretKey和DatabaseUri指向一个Mongo实例。当我第一次拥有DatabaseUri时,没有加载SecretKey,并且由于缺少参数SecretKey而导致构建失败。当我真的很绝望时,我先换了使用SecretKey的参数,然后它开始起作用!