“部署 AWS CloudFormation 堆栈”操作 YAML - Amazon CodeCatalyst

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

“部署 AWS CloudFormation 堆栈”操作 YAML

下面是部署 AWS CloudFormation 堆栈操作的 YAML 定义。要了解如何使用此操作,请参阅部署 AWS CloudFormation 堆栈

此操作定义部分包含在更广泛的工作流定义文件中。有关此文件的更多信息,请参阅工作流 YAML 定义

注意

接下来的大多数 YAML 属性在可视化编辑器中都有对应的 UI 元素。要查找 UI 元素,请使用 Ctrl+F。该元素将与其关联的 YAML 属性一起列出。

# The workflow definition starts here. # See 顶级属性 for details. Name: MyWorkflow SchemaVersion: 1.0 Actions: # The action definition starts here. DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 DependsOn: - build-action Compute: Type: EC2 | Lambda Fleet: fleet-name Timeout: timeout-minutes Environment: Name: environment-name Connections: - Name: account-connection-name Role: DeployRole Inputs: Sources: - source-name-1 Artifacts: - CloudFormation-artifact Configuration: name: stack-name region: us-west-2 template: template-path role-arn: arn:aws:iam::123456789012:role/StackRole capabilities: CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND parameter-overrides: KeyOne=ValueOne,KeyTwo=ValueTwo | path-to-JSON-file no-execute-changeset: 1|0 fail-on-empty-changeset: 1|0 disable-rollback: 1|0 termination-protection: 1|0 timeout-in-minutes: minutes notification-arns: arn:aws:sns:us-east-1:123456789012:MyTopic,arn:aws:sns:us-east-1:123456789012:MyOtherTopic monitor-alarm-arns: arn:aws:cloudwatch::123456789012:alarm/MyAlarm,arn:aws:cloudwatch::123456789012:alarm/MyOtherAlarm monitor-timeout-in-minutes: minutes tags: '[{"Key":"MyKey1","Value":"MyValue1"},{"Key":"MyKey2","Value":"MyValue2"}]'

DeployCloudFormationStack

(必需)

指定操作的名称。工作流中的所有操作名称都必须是唯一的。操作名称仅限于字母数字字符(a-z、A-Z、0-9)、连字符(-)和下划线(_)。不允许使用空格。不能使用引号在操作名称中包含特殊字符和空格。

默认值:DeployCloudFormationStack_nn

对应的 UI:“配置”选项卡/操作显示名称

Identifier

(DeployCloudFormationStack/Identifier)

(必需)

标识操作。除非您要更改版本,否则不要更改此属性。有关更多信息,请参阅指定要使用的操作版本

默认值:aws/cfn-deploy@v1

对应的 UI:工作流图表/DeployCloudFormationStack_nn/aws/cfn-deploy@v1 标签

DependsOn

(DeployCloudFormationStack/DependsOn)

(可选)

指定必须成功运行才能使该操作运行的操作、操作组或阶段门。

有关“依赖于”功能的更多信息,请参阅顺序操作

对应的 UI:“输入”选项卡/依赖于 – 可选

Compute

(DeployCloudFormationStack/Compute)

(可选)

用于运行工作流操作的计算引擎。您可以在工作流级别或操作级别指定计算,但不能同时在这两个级别指定计算。在工作流级别指定计算时,计算配置将应用于工作流中定义的所有操作。在工作流级别,您还可以在同一个实例上运行多个操作。有关更多信息,请参阅跨操作共享计算

对应的 UI:

Type

(DeployCloudFormationStack/Compute/Type)

(如果包含 Compute,则为必需)

计算引擎的类型。可以使用下列值之一:

  • EC2(可视化编辑器)或 EC2(YAML 编辑器)

    已经过优化,提高了操作运行期间的灵活性。

  • Lambda(可视化编辑器)或 Lambda(YAML 编辑器)

    优化了操作启动速度。

有关计算类型的更多信息,请参阅计算类型

对应的 UI:“配置”选项卡/高级 – 可选/计算类型

Fleet

(DeployCloudFormationStack/Compute/Fleet)

(可选)

指定将运行您的工作流或工作流操作的计算机或实例集。对于按需实例集,当操作开始时,工作流会预置操作所需的资源,操作完成后计算机就会被销毁。按需实例集的示例:Linux.x86-64.LargeLinux.x86-64.XLarge。有关按需实例集的更多信息,请参阅按需实例集属性

使用预置的实例集,您可以配置一组专用计算机来运行工作流操作。这些计算机保持空闲状态,可随时开始立即处理操作。有关预置实例集的更多信息,请参阅预置实例集属性

如果省略 Fleet,则默认值为 Linux.x86-64.Large

对应的 UI:“配置”选项卡/高级 – 可选/计算实例集

Timeout

(DeployCloudFormationStack/Timeout)

(可选)

指定操作在由 CodeCatalyst 结束之前可运行的分钟数(YAML 编辑器)或小时和分钟数(可视化编辑器)。最小值为 5 分钟,最大值如 中的工作流程配额 CodeCatalyst 中描述。默认超时值与最大超时值相同。

对应的 UI:“配置”选项卡/超时 (分钟) – 可选

Environment

(DeployCloudFormationStack/Environment)

(必需)

指定要用于操作的 CodeCatalyst 环境。该操作连接到在所选环境中指定的 AWS 账户和可选的 Amazon VPC。该操作使用环境中指定的默认 IAM 角色连接到 AWS 账户,并使用在 Amazon VPC 连接中指定的 IAM 角色连接到 Amazon VPC。

注意

如果默认 IAM 角色不具有操作所需的权限,则可以将操作配置为使用其他角色。有关更多信息,请参阅更改操作的 IAM 角色

有关环境的更多信息,请参阅部署到 AWS 账户 和 VPCs创建环境

对应的 UI:“配置”选项卡/环境

Name

(DeployCloudFormationStack/Environment/Name)

(如果包含 Environment,则为必需)

指定要与操作关联的现有环境的名称。

对应的 UI:“配置”选项卡/环境

Connections

(DeployCloudFormationStack/Environment/Connections)

(在新版本的操作中为可选;在旧版本中为必需)

指定要与操作关联的账户连接。您在 Environment 下最多只能指定一个账户连接。

如果您不指定账户连接:

  • 该操作会使用在 CodeCatalyst 控制台环境中指定的 AWS 账户连接和默认 IAM 角色。有关向环境添加账户连接和默认 IAM 角色的信息,请参阅创建环境

  • 默认 IAM 角色必须包含操作所需的策略和权限。要具体确定这些策略和权限,请参阅操作的 YAML 定义文档中 Role 属性的描述。

有关账户连接的更多信息,请参阅允许在已连接的情况下访问 AWS 资源 AWS 账户。有关向环境添加账户连接的信息,请参阅创建环境

对应的 UI:根据操作版本的不同,为下列项之一:

  • (新版本)“配置”选项卡/环境/我的环境中的具体内容/三点菜单/切换角色

  • (旧版本)“配置”选项卡/“环境/账户/角色”/AWS 账户连接

Name

(DeployCloudFormationStack/Environment/Connections/Name)

(如果包含 Connections,则为必需)

指定账户连接的名称。

对应的 UI:根据操作版本的不同,为下列项之一:

  • (新版本)“配置”选项卡/环境/我的环境中的具体内容/三点菜单/切换角色

  • (旧版本)“配置”选项卡/“环境/账户/角色”/AWS 账户连接

Role

(DeployCloudFormationStack/Environment/Connections/Role)

(如果包含 Connections,则为必需)

指定部署 AWS CloudFormation 堆栈操作用于访问 AWS 和 AWS CloudFormation 服务的 IAM 角色的名称。请确保您已将该角色添加到自己的 CodeCatalyst 空间,并且该角色包含以下策略。

如果您未指定 IAM 角色,则该操作将使用 CodeCatalyst 控制台内的环境中列出的默认 IAM 角色。如果您使用此环境中的默认角色,请确保该角色具有以下策略。

  • 以下权限策略:

    警告

    将权限限制在以下策略所示的范围内。使用具有更广泛权限的角色可能会带来安全风险。

    { "Version": "2012-10-17", "Statement": [{ "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:Describe*", "cloudformation:UpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:SetStackPolicy", "cloudformation:ValidateTemplate", "cloudformation:List*", "iam:PassRole" ], "Resource": "*", "Effect": "Allow" }] }
    注意

    第一次使用该角色时,请在资源策略语句中使用以下通配符,然后在策略可用后使用资源名称缩小策略范围。

    "Resource": "*"
  • 以下自定义信任策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
注意

如果需要,可以在此操作中使用 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。有关该角色的更多信息,请参阅 为您的账户和空间创建 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。了解 CodeCatalystWorkflowDevelopmentRole-spaceName 角色具有完全访问权限可能会带来安全风险。我们建议您仅在教程和安全要求较低的场景中使用此角色。

对应的 UI:根据操作版本的不同,为下列项之一:

  • (新版本)“配置”选项卡/环境/我的环境中的具体内容/三点菜单/切换角色

  • (旧版本)“配置”选项卡/“环境/账户/角色”/角色

Inputs

(DeployCloudFormationStack/Inputs)

(可选)

Inputs 部分中定义了工作流运行期间 DeployCloudFormationStack 所需的数据。

注意

每个部署 AWS CloudFormation 堆栈操作最多有四个输入(一个源和三个构件)。

如果您需要引用驻留在不同输入(例如源和构件)中的文件,则源输入是主输入,构件是辅助输入。辅助输入中对文件的引用采用特殊前缀,以与主输入中的文件区分开来。有关详细信息,请参阅示例:引用多个构件中的文件

对应的 UI:输入选项卡

Sources

(DeployCloudFormationStack/Inputs/Sources)

(如果您的 CloudFormation 或 AWS SAM 模板存储在源存储库中,则为必填项)

如果您的 CloudFormation 或 AWS SAM 模板存储在一个源存储库中,请指定该源存储库的标签。目前,唯一支持的标签是 WorkflowSource

如果您的 CloudFormation 或 AWS SAM 模板未包含在源存储库中,则必须位于另一个操作生成的构件中或位于 Amazon S3 存储桶中。

有关来源的更多信息,请参阅将源存储库连接到工作流

对应的 UI:“输入”选项卡/来源 – 可选

Artifacts - input

(DeployCloudFormationStack/Inputs/Artifacts)

(如果您的 CloudFormation 或 AWS SAM 模板存储在上一操作生成的输出构件中,则为必填项)

如果要部署的 CloudFormation 或 AWS SAM 模板包含在上一操作生成的构件中,请在此处指定该构件。如果您的 CloudFormation 模板未包含在构件中,则必须位于源存储库或 Amazon S3 存储桶中。

有关构件的更多信息(包括示例),请参阅在操作之间共享构件和文件

对应的 UI:“配置”选项卡/构件 – 可选

Configuration

(DeployCloudFormationStack/Configuration)

(必需)

可在其中定义操作的配置属性的部分。

对应的 UI:配置选项卡

name

(DeployCloudFormationStack/Configuration/name)

(必需)

部署 AWS CloudFormation 堆栈操作创建或更新的 CloudFormation 堆栈指定名称。

对应的 UI:“配置”选项卡/堆栈名称

region

(DeployCloudFormationStack/Configuration/region)

(必需)

指定将堆栈部署到的 AWS 区域。有关区域代码的列表,请参阅区域端点

对应的 UI:“配置”选项卡/堆栈区域

template

(DeployCloudFormationStack/Configuration/template)

(必需)

指定 CloudFormation 或 AWS SAM 模板文件的名称和路径。模板可以采用 JSON 或 YAML 格式,并且可以位于源存储库、上一操作生成的构件或 Amazon S3 存储桶中。如果模板文件位于源存储库或构件中,则路径相对于源存储库或构件根目录。如果模板位于 Amazon S3 存储桶中,则路径为模板的对象 URL 值。

示例:

./MyFolder/MyTemplate.json

MyFolder/MyTemplate.yml

https://MyBucket.s3.us-west-2.amazonaws.com/MyTemplate.yml

注意

您可能需要在模板的文件路径中添加前缀,以指明要在哪个构件或源中查找它。有关更多信息,请参阅引用源存储库文件在构件中引用文件

对应的 UI:“配置”选项卡/模板

role-arn

(DeployCloudFormationStack/Configuration/role-arn)

(必需)

指定堆栈角色的 Amazon 资源名称(ARN)。CloudFormation 使用此角色来访问和修改堆栈中的资源。例如:arn:aws:iam::123456789012:role/StackRole

确保堆栈角色包括:

  • 一个或多个权限策略。这些策略取决于您在堆栈中拥有的资源。例如,如果堆栈包含 AWS Lambda 函数,则您需要添加授予对 Lambda 的访问权限的权限。如果您按照教程:部署无服务器应用程序中描述的教程进行操作,则其中包含一个名为创建堆栈角色的过程,该过程列出堆栈角色在部署典型无服务器应用程序堆栈时所需的权限。

    警告

    将权限限制为 CloudFormation 服务访问堆栈中资源所需的权限。使用具有更广泛权限的角色可能会带来安全风险。

  • 以下信任策略:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

(可选)将此角色与您的账户连接关联。要了解有关将 IAM 角色与账户连接关联的更多信息,请参阅将 IAM 角色添加到账户连接。如果您未将堆栈角色与账户连接关联,则堆栈角色将不会出现在可视化编辑器中的堆栈角色下拉列表中;但仍可以使用 YAML 编辑器在 role-arn 字段中指定角色 ARN。

注意

如果需要,可以在此操作中使用 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。有关该角色的更多信息,请参阅 为您的账户和空间创建 CodeCatalystWorkflowDevelopmentRole-spaceName 角色。了解 CodeCatalystWorkflowDevelopmentRole-spaceName 角色具有完全访问权限可能会带来安全风险。我们建议您仅在教程和安全要求较低的场景中使用此角色。

对应的 UI:“配置”选项卡/堆栈角色 – 可选

capabilities

(DeployCloudFormationStack/Configuration/capabilities)

(必需)

指定要使 AWS CloudFormation 能够创建某些堆栈而需要的 IAM 功能的列表。在大多数情况下,您可以将 capabilities 保留默认值 CAPABILITY_IAM,CAPABILITY_NAMED_IAM,CAPABILITY_AUTO_EXPAND

如果您在部署 AWS CloudFormation 堆栈操作的日志中看到 ##[error] requires capabilities: [capability-name],请参阅如何修复 IAM 功能错误?以获取有关如何修复该问题的信息。

有关 IAM 功能的更多信息,请参阅《IAM 用户指南》中的确认 AWS CloudFormation 模板中的 IAM 资源

对应的 UI:“配置”选项卡/高级/功能

parameter-overrides

(DeployCloudFormationStack/Configuration/parameter-overrides)

(可选)

在 AWS CloudFormation 或 AWS SAM 模板中指定不具有默认值或要为其指定非默认值的参数。有关参数的更多信息,请参阅《AWS CloudFormation 用户指南》中的参数

parameter-overrides 属性接受:

  • 包含参数和值的 JSON 文件。

  • 参数和值的逗号分隔列表。

指定 JSON 文件
  1. 确保 JSON 文件使用下列语法之一:

    { "Parameters": { "Param1": "Value1", "Param2": "Value2", ... } }

    或...

    [ { "ParameterKey": "Param1", "ParameterValue": "Value1" }, ... ]

    (虽然还有其他语法,但在截至撰写本文时,CodeCatalyst 尚不支持这些语法。) 有关在 JSON 文件中指定 CloudFormation 参数的更多信息,请参阅 AWS CLI Command Reference 中的 Supported JSON syntax

  2. 使用下列格式之一指定 JSON 文件的路径:

    • 如果 JSON 文件位于上一操作的输出构件中,请使用:

      file:///artifacts/current-action-name/output-artifact-name/path-to-json-file

      有关详细信息,请参阅示例 1

    • 如果 JSON 文件位于源存储库中,请使用:

      file:///sources/WorkflowSource/path-to-json-file

      有关详细信息,请参阅示例 2

      示例 1 – JSON 文件位于输出构件中

      ##My workflow YAML ... Actions: MyBuildAction: Identifier: aws/build@v1 Outputs: Artifacts: - Name: ParamArtifact Files: - params.json Configuration: ... MyDeployCFNStackAction: Identifier: aws/cfn-deploy@v1 Configuration: parameter-overrides: file:///artifacts/MyDeployCFNStackAction/ParamArtifact/params.json

      示例 2 – JSON 文件位于源存储库中的名为 my/folder 的文件夹中

      ##My workflow YAML ... Actions: MyDeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 Inputs: Sources: - WorkflowSource Configuration: parameter-overrides: file:///sources/WorkflowSource/my/folder/params.json
使用参数的逗号分隔列表
  • 使用以下格式在 parameter-overrides 属性中添加参数名称/值对:

    param-1=value-1,param-2=value-2

    例如,假设使用以下 AWS CloudFormation 模板:

    ##My CloudFormation template Description: My AWS CloudFormation template Parameters: InstanceType: Description: Defines the Amazon EC2 compute for the production server. Type: String Default: t2.micro AllowedValues: - t2.micro - t2.small - t3.medium Resources: ...

    ...您可以设置 parameter-overrides 属性,如下所示:

    ##My workflow YAML ... Actions: ... DeployCloudFormationStack: Identifier: aws/cfn-deploy@v1 Configuration: parameter-overrides: InstanceType=t3.medium,UseVPC=true
    注意

    您可以使用 undefined 作为值来指定不带相应值的参数名称。例如:

    parameter-overrides: MyParameter=undefined

    结果是,在堆栈更新期间,CloudFormation 使用现有参数值作为给定参数名称。

对应的 UI:

  • “配置”选项卡/高级/参数覆盖

  • “配置”选项卡/高级/参数覆盖/使用文件指定替代

  • “配置”选项卡/高级/参数覆盖/使用值集指定替代

no-execute-changeset

(DeployCloudFormationStack/Configuration/no-execute-changeset)

(可选)

指定是否希望 CodeCatalyst 创建 CloudFormation 更改集,然后在运行此更改集之前停止。这将使您能够在 CloudFormation 控制台中查看更改集。如果您对更改集满意,请禁用此选项,然后重新运行工作流,这样 CodeCatalyst 便能不停地创建和运行更改集。默认设置为不停地创建和运行更改集。有关更多信息,请参阅《AWS CLI Command Reference》中的 AWS CloudFormation deploy 参数。有关查看更改集的更多信息,请参阅《AWS CloudFormation 用户指南》中的查看更改集

对应的 UI:“配置”选项卡/高级/没有执行更改集

fail-on-empty-changeset

(DeployCloudFormationStack/Configuration/fail-on-empty-changeset)

(可选)

指定是否希望 CodeCatalyst 在 CloudFormation 更改集为空时使部署 AWS CloudFormation 堆栈操作失败。(如果更改集为空,则表示在最新部署期间未对堆栈进行任何更改。) 默认设置为,在更改集为空时允许操作继续执行,并返回一条 UPDATE_COMPLETE 消息(即使未更新堆栈)。

有关此设置的更多信息,请参阅《AWS CLI Command Reference》中的 AWS CloudFormation deploy 参数。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的使用更改集更新堆栈

对应的 UI:“配置”选项卡/高级/空更改集会失败

disable-rollback

(DeployCloudFormationStack/Configuration/disable-rollback)

(可选)

指定是否希望 CodeCatalyst 在堆栈部署失败时回滚该部署。回滚会使堆栈返回到上一个已知的稳定状态。默认设置为启用回滚。有关此设置的更多信息,请参阅《AWS CLI Command Reference》中的 AWS CloudFormation deploy 参数。

有关部署 AWS CloudFormation 堆栈操作如何处理回滚的更多信息,请参阅配置回滚

有关回滚堆栈的更多信息,请参阅《AWS CloudFormation 用户指南》中的堆栈故障选项

对于的 UI:“配置”选项卡/高级/禁用回滚

termination-protection

(DeployCloudFormationStack/Configuration/termination-protection)

(可选)

指定是否希望部署 AWS CloudFormation 堆栈操作向其部署的堆栈添加终止保护。如果用户尝试删除已启用终止保护的堆栈,则删除操作会失败,并且堆栈及其状态将保持不变。默认设置为禁用终止保护。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的保护堆栈不被删除

对应的 UI:“配置”选项卡/高级/终止保护

timeout-in-minutes

(DeployCloudFormationStack/Configuration/timeout-in-minutes)

(可选)

指定 CloudFormation 应分配的在堆栈创建操作超时并将堆栈状态设置为 CREATE_FAILED 前的时间量(以分钟为单位)。如果 CloudFormation 无法在分配的时间内创建整个堆栈,它将因超时而导致堆栈创建失败并回滚该堆栈。

默认情况下,堆栈创建从不超时。但是,单个资源可能会根据它们所实施服务的性质而具有自己的超时。例如,如果堆栈中的单个资源发生超时,则堆栈创建也会超时,即使尚未达到您为堆栈创建指定的超时也不例外。

对应的 UI:“配置”选项卡/高级/CloudFormation 超时

notification-arns

(DeployCloudFormationStack/Configuration/notification-arns)

(可选)

指定您希望 CodeCatalyst 将通知消息发送到的 Amazon SNS 主题的 ARN。例如,arn:aws:sns:us-east-1:111222333:MyTopic。当部署 AWS CloudFormation 堆栈操作运行时,CodeCatalyst 会与 CloudFormation 进行协调,为堆栈创建或更新过程中发生的每个 AWS CloudFormation 事件发送一条通知。(事件显示在 AWS CloudFormation 控制台中堆栈的事件选项卡中。) 最多可以指定五个主题。有关更多信息,请参阅 Amazon SNS 是什么?

对应的 UI:“配置”选项卡/高级/通知 ARN

monitor-alarm-arns

(DeployCloudFormationStack/Configuration/monitor-alarm-arns)

(可选)

指定 Amazon CloudWatch 警报的 Amazon 资源名称(ARN)以用作回滚触发器。例如,arn:aws:cloudwatch::123456789012:alarm/MyAlarm。您可以拥有最多 5 个回滚触发器。

注意

如果您指定 CloudWatch 警报 ARN,则还需要配置其他权限才能允许该操作访问 CloudWatch。有关更多信息,请参阅配置回滚

对应的 UI:“配置”选项卡/高级/监控告警 ARN

monitor-timeout-in-minutes

(DeployCloudFormationStack/Configuration/monitor-timeout-in-minutes)

(可选)

指定 CloudFormation 监控指定警报的时间量(0 到 180 分钟)。在部署完所有堆栈资源开始监控。如果在指定的监控时间内发生警报,则部署将失败,并且 CloudFormation 将回滚整个堆栈操作。

默认值:0。CloudFormation 仅在部署堆栈资源时(而非之后)监控警报。

对应的 UI:“配置”选项卡/高级/监控时间

tags

(DeployCloudFormationStack/Configuration/tags)

(可选)

指定要附加到 CloudFormation 堆栈的标签。标签是任意键值对,可用于针对成本分配等目的来标识堆栈。有关什么是标签以及如何使用标签的更多信息,请参阅《Amazon EC2 用户指南》中的标记资源。有关在 CloudFormation 中标记的更多信息,请参阅《AWS CloudFormation 用户指南》中的设置 AWS CloudFormation 堆栈选项

密钥可包含字母数字字符或空格,最多包含 127 个字符。值可包含字母数字字符或空格,最多包含 255 个字符。

您可以为每个堆栈添加最多 50 个唯一标签。

对应的 UI:“配置”选项卡/高级/标签