19

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

我还可以部署到 AWS,它显然采用与 相同的标志aws cloudformation deploy,因此我可以传递一个带有应用程序机密(API 密钥等)的参数文件。

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

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

4

4 回答 4

27

你可以使用--parameter-overrides开关。语法很冗长,如下所示:

sam local start-api --parameter-overrides ParameterKey=Key1,ParameterValue=value1 ParameterKey=Key2,ParameterValue=value2

也就是说,您需要用逗号分隔指定每对的值。

然后每一空格隔开。


来自sam local start-api --help

  --parameter-overrides       Optional. A string that contains
                              CloudFormation parameter overrides encoded
                              as key=value pairs. Use the same format as
                              the AWS CLI, e.g. 'ParameterKey=KeyPairName,
                              ParameterValue=MyKey ParameterKey=InstanceTy
                              pe,ParameterValue=t1.micro'
于 2018-03-16T00:42:02.570 回答
3

您可以在 sam deploy 中使用 --parameter-overrides ,就像在 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 中显式指定。帮助我进行本地测试。

希望能帮助到你。:)

于 2019-08-21T08:50:35.140 回答
3

您似乎还可以使用-nor--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

这是专门针对您的 lambda 函数的环境变量,所以它可能不完全是您所追求的?

于 2018-10-23T15:32:27.980 回答
0

我奇怪的经验是它取决于参数的顺序。我有两个参数——指向 Mongo 实例的 SecretKey 和 DatabaseUri。当我第一次拥有 DatabaseUri 时,没有加载 SecretKey,并且由于缺少参数 SecretKey,构建失败。当我真的很绝望时,我首先交换了具有 SecretKey 的参数,它开始起作用了!

于 2020-03-14T10:26:00.360 回答