【问题标题】:How do I specify template parameters when running AWS SAM Local?运行 AWS SAM Local 时如何指定模板参数?
【发布时间】:2018-08-22 07:45:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我不确定这在某些版本的 SAM CLI 上是否可行。我已经尝试了上述答案,但它似乎不适用于我的 SAM CLI 版本。我得到Error: no such option: --parameter-valuessam --version 产生 4.0。它似乎也没有列在sam local start-api --help 的选项中(sam local start-api --help | grep -i parameter-values 没有产生任何结果)。

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


【解决方案1】:

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

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

即需要用逗号分隔指定每一对的keyvalue

然后每个pair空格隔开。


来自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'

【讨论】:

  • 是的,我在帮助中也注意到了这一点。但是,问题特别是关于如何将 file path 传递给带有参数值的 file,就像您可以使用 aws cloudformation deploy 一样,但我找不到如何或是否可以使用sam local start-api
  • 好像不支持那个。您可以尝试使用带有--parameter-values $(cat myparams.cfg) 的shell。该文件需要采用与平时不同的格式,但它应该可以工作。
  • sam local start-api --help 现在也可以正确声明 --parameter-overrides
  • 是否可以从文件中使用--parameter-override?我想将我的环境参数与我的脚本分开
  • @Madeo 听起来您可能会为此使用脚本。用户从命令行输入选择多个选项,然后在用户输入选项后运行构建/打包/部署序列。
【解决方案2】:

您似乎还可以使用-n--env-vars 参数将JSON 文件中的环境变量传递给您的函数。查看文档:Test Your Serverless Applications Locally Using SAM CLI (Public Beta)

简而言之,您的 JSON 文件看起来像(从文档中复制的示例):

{
  "MyFunction1": {
    "TABLE_NAME": "localtable",
    "BUCKET_NAME": "testBucket"
  },
  "MyFunction2": {
    "TABLE_NAME": "localtable",
    "STAGE": "dev"
  },
}

然后你可以这样做:

 $ sam local start-api --env-vars env.json

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

【讨论】:

  • 否;虽然有用,但这并不能解决问题。例如,我不能使用这种方法来参数化 dynamodb 表的名称或类似的东西。
【解决方案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中显式指定。帮助我进行本地测试。

希望对您有所帮助。 :)

【讨论】:

  • 是否可以将--parameters-overrides 用作.json 文件?
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2022-01-15
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多