将参数添加到 AWS CloudFormation / CodePipeline 堆栈

Posted

技术标签:

【中文标题】将参数添加到 AWS CloudFormation / CodePipeline 堆栈【英文标题】:Add parameter to an AWS CloudFormation / CodePipeline stack 【发布时间】:2022-01-19 22:47:22 【问题描述】:

我在 Lambda 中从 AWS 控制台创建了一个应用程序:

该应用使用 sam、云形成、代码管道(每次推送到 Github 时自动部署)等。它带有一个在 template.yml 中定义的参数:

Parameters:
  AppId:
    Type: String

但现在我又添加了一些:

Parameters:
  AppId:
    Type: String
  CognitoUserPoolName:
    Type: String
  CognitoUserPoolClientName:
    Type: String

我应该在 AWS 的哪个位置定义这些值?

注意:我不会通过运行 sam deploy 来部署,代码管道会自动为我部署。这就是“无服务器 API 后端”模板开箱即用的方式。

【问题讨论】:

【参考方案1】:

SAM

您在sam deploy 命令或samconfig.toml 本地设置Parameter Overrides。

# The `--parameter-overrides` option is a string of key-value pairs corresponding to the parameters in your SAM template.
sam deploy --parameter-overrides 'AppId=MyReallySuperApp,CognitoUserPoolName=AppPool' ...etc

代码管道

CodePipeline,管道部署阶段also accept parameter overrides,在控制台中或使用update-pipeline api 命令。您可以为要部署的堆栈参数值的每个组合创建额外的部署阶段。

无论您提供何种参数值,参数值都是在部署时设置的。您可以在 CloudFormation 控制台中查看已部署堆栈的参数值。

顺便说一句,该选项称为 Parameter Overrides,因为您可以为每个 Parameter 设置默认模板值。

Parameters:
  AppId:
    Type: String
    Default: MySuperApp

【讨论】:

sam deploy 没有实际部署应用程序吗?这是一次性的事情,以便记录参数吗?该部署的行为是否与从 github 自动部署的代码管道相同? 我编辑了答案以解释模板参数如何与 CodePipeline 一起使用。 谢谢。我读了那个文件,但我仍然无法弄清楚。所有这些 sn-ps 看起来都属于不是为我的项目创建的文件。在控制台中更新它们时,在哪里? 命令行 API 似乎指向有一个定义代码管道的文件,您可以对其进行修改然后重新应用。但 Lambda 应用程序模板不会创建该文件,它只是神奇地生成了管道。 在控制台中:[CodePipeline] > [Pipeline/Pipelines/Pipeline 在侧边栏中] > [选择管道] > [Edit 按钮] > [找到部署阶段 - Edit stage 按钮] > [@987654332 @动作“铅笔”图标] > [高级] > [Parameter overrides]

以上是关于将参数添加到 AWS CloudFormation / CodePipeline 堆栈的主要内容,如果未能解决你的问题,请参考以下文章

传递List类型的参数 嵌套的CloudFormation模板

AWS:cloudformation CommaDelimitedList 和手动列表不匹配

Cloudformation + OpsWorks

如何在存储桶名称中使用变量 AWS Cloudformation

通过 CloudFormation 为现有表添加自动缩放到 AWS DynamoDB

Cloudformation 的最低权限 AWS IAM 策略