运行AWS SAM Local时如何指定模板参数?

时间:2018-03-13 22:02:40

标签: amazon-web-services amazon-cloudformation aws-sam-cli

使用AWS SAM Local我可以在本地测试我的无服务器应用程序,这很棒。

我还可以deploy to AWS,它显然采用与aws cloudformation deploy相同的标记,因此我可以传递参数文件,例如应用程序机密(API密钥等)。

但是,我无法在aws local start-api --help或Github上的文档中找到有关如何在本地测试时使用参数文件的内容。

运行sam local start-api时,如何指向要与模板一起使用的参数文件?

4 个答案:

答案 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。它还匹配--helpref),因此它适合。

最后但并非最不重要的是,它有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的参数,然后它开始起作用!