教程:创建使用 Amazon CloudFormation 部署操作中的变量的管道 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:创建使用 Amazon CloudFormation 部署操作中的变量的管道

在本教程中,您将使用 Amazon CodePipeline 控制台创建带有部署操作的管道。管道运行时,模板会创建一个堆栈,另外还创建一个 outputs 文件。堆栈模板生成的输出是中 Amazon CloudFormation 操作生成的变量 CodePipeline。

在从模板创建堆栈的操作中,您可以指定一个变量命名空间。然后,后续操作可以使用由 outputs 文件生成的变量。在此示例中,您将根据 Amazon CloudFormation 操作生成的StackName变量创建更改集。手动批准后,执行更改集,然后创建删除堆栈操作,此操作根据 StackName 变量删除堆栈。

的 CodePipeline 操作不 Amazon CloudFormation 适用于中国(北京)和中国(宁夏)区域。要参考其他可用操作,请参阅 产品和服务与 CodePipeline

先决条件:创建 Amazon CloudFormation 服务角色和 CodeCommit 存储库

您必须已经具备以下各项:

  • 存储 CodeCommit 库。您可以使用您在中创建的 Amazon CodeCommit 存储库教程:创建简单的管道(CodeCommit存储库)

  • 此示例从模板创建 Amazon DocumentDB 堆栈。您必须使用 Amazon Identity and Access Management (IAM) 为 Amazon DocumentDB 创建具有以下权限的 Amazon CloudFormation 服务角色。

    "rds:DescribeDBClusters", "rds:CreateDBCluster", "rds:DeleteDBCluster", "rds:CreateDBInstance"

步骤 1:下载、编辑和上传示例 Amazon CloudFormation 模板

下载示例 Amazon CloudFormation 模板文件并将其上传到您的 CodeCommit 存储库。

  1. 导航到您所在区域的示例模板页面。例如,对应于 us-west-2 的页面位于 https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html。在 Amazon DocumentDB 下,下载 Amazon DocumentDB 集群的模板。文件名为 documentdb_full_stack.yaml

  2. 解压缩 documentdb_full_stack.yaml 文件,然后在文本编辑器中打开它。进行以下更改。

    1. 对于此示例,将以下 Purpose: 参数添加到模板中的 Parameters 部分。

      Purpose: Type: String Default: testing AllowedValues: - testing - production Description: The purpose of this instance.
    2. 对于此示例,将以下 StackName 输出添加到模板中的 Outputs: 部分。

      StackName: Value: !Ref AWS::StackName
  3. 将模板文件上传到您的 Amazon CodeCommit 存储库。您必须将解压缩和编辑的模板文件上传到存储库的根目录。

    要使用 CodeCommit 控制台上传文件,请执行以下操作:

    1. 打开 CodeCommit 控制台,然后从 “存储库” 列表中选择您的存储库

    2. 选择添加文件,然后选择上传文件

    3. 选择选择文件,然后浏览找到您的文件。通过输入您的用户名和电子邮件地址来提交更改。选择提交更改

    文件在存储库的根级别看起来应该像这样:

    documentdb_full_stack.yaml

步骤 2:创建管道

在此部分中,您将使用以下操作创建管道:

  • 一个源阶段,其 CodeCommit 操作中的源构件就是您的模板文件。

  • 包含部署操作的 Amazon CloudFormation 部署阶段。

分别向由向导创建的源和部署阶段中的每个操作分配一个变量命名空间 SourceVariablesDeployVariables。由于已向操作分配命名空间,因此在此示例中配置的变量可用于下游操作。有关更多信息,请参阅 Variables

使用向导创建管道
  1. 登录 Amazon Web Services Management Console 并打开 CodePipeline 控制台,网址为 http://console.aws.amazon.com/codesuite/codepipeline/home

  2. 欢迎页面、入门页面或管道页面上,选择创建管道

  3. 步骤 1:选择管道设置管道名称中,输入 MyCFNDeployPipeline

  4. 在本教程中,为管道类型选择 V1。也可以选择 V2;但请注意,不同管道类型具有不同的特性和价格。有关更多信息,请参阅 管道类型

  5. 服务角色中,执行下列操作之一:

    • 选择 “新建服务角色” CodePipeline 以允许在 IAM 中创建服务角色。

    • 选择现有服务角色。在角色名称中,从列表中选择您的服务角色。

  6. 构件存储中:

    1. 选择默认位置以将默认构件存储(如指定为默认值的 Amazon S3 构件桶)用于为管道选择的区域中的管道。

    2. 如果您在管道所在的区域中已有构件存储(例如,Amazon S3 构件桶),请选择自定义位置

    注意

    这不是源代码的源存储桶。这是管道的项目存储。每个管道都需要一个单独的构件存储,例如 S3 存储桶。创建或编辑管道时,管道区域中必须有一个工件存储桶,并且每个运行操作的 Amazon 区域都必须有一个工件存储桶。

    有关更多信息,请参阅 输入和输出构件CodePipeline 管道结构参考

    选择下一步

  7. 步骤 2:添加源阶段中:

    1. 源提供程序中,选择 Amazon CodeCommit

    2. 存储库名称中,选择您在中创建的 CodeCommit 存储库的名称步骤 1:创建 CodeCommit 存储库

    3. 分支名称中,选择包含最新的代码更新的分支的名称。

    选择存储库名称和分支后,将显示要为此管道创建的 Amazon CloudWatch Events 规则。

    选择下一步

  8. 步骤 3:添加构建阶段中,选择跳过构建阶段,并通过再次选择跳过接受警告消息。

    选择下一步

  9. 步骤 4:添加部署阶段中:

    1. 操作名称中,选择部署。在部署提供商中,选择CloudFormation

    2. 操作模式中,选择创建或更新堆栈

    3. 堆栈名称中,为堆栈输入名称。这是模板将创建的堆栈的名称。

    4. 输出文件名中,输入输出文件的名称,如 outputs。这是创建堆栈后由操作创建的文件的名称。

    5. 展开高级。在参数覆盖下,作为键值对输入模板覆盖。例如,此模板需要以下覆盖。

      { "DBClusterName": "MyDBCluster", "DBInstanceName": "MyDBInstance", "MasterUser": "UserName", "MasterPassword": "Password", "DBInstanceClass": "db.r4.large", "Purpose": "testing"}

      如果不输入覆盖,则模板会创建一个具有默认值的堆栈。

    6. 选择下一步

    7. 选择创建管道。允许您的管道运行。您的两阶段管道已完成并准备好添加其他阶段。

步骤 3:添加 Amazon CloudFormation 部署操作以创建更改集

在管道中创建下一个操作, Amazon CloudFormation 允许在手动批准操作之前创建变更集。

  1. 打开 CodePipeline 控制台,网址为 https://console.aws.amazon.com/codepipeline/

    管道下,选择您的管道并选择查看。该图显示了您的管道源和部署阶段。

  2. 选择以编辑管道,或继续在编辑模式下显示管道。

  3. 选择以编辑部署阶段。

  4. 添加一个部署操作,该操作将为在上一个操作中创建的堆栈创建更改集。您可以在阶段中的现有操作之后添加此操作。

    1. 操作名称中,输入 Change_Set。对于操作提供程序,选择 Amazon CloudFormation

    2. 输入构件中,选择SourceArtifact

    3. 操作模式中,选择创建或替换更改集

    4. 堆栈名称中,如下所示输入变量语法。这是为其创建更改集的堆栈的名称,其中,向操作分配默认命名空间 DeployVariables

      #{DeployVariables.StackName}
    5. 更改集名称中,输入更改集的名称。

      my-changeset
    6. 参数覆盖中,将 Purpose 参数从 testing 更改为 production

      { "DBClusterName": "MyDBCluster", "DBInstanceName": "MyDBInstance", "MasterUser": "UserName", "MasterPassword": "Password", "DBInstanceClass": "db.r4.large", "Purpose": "production"}
    7. 选择完成以保存操作。

步骤 4:添加手动审批操作

在管道中创建手动审批操作。

  1. 选择以编辑管道,或继续在编辑模式下显示管道。

  2. 选择以编辑部署阶段。

  3. 在创建更改集的部署操作之后添加手动审批操作。此操作允许您在管道执行更改集 Amazon CloudFormation 之前验证中已创建的资源变更集。

步骤 5:添加 CloudFormation部署操作以执行更改集

在管道中创建下一个操作, Amazon CloudFormation 允许在手动批准操作之后执行变更集。

  1. 打开 CodePipeline 控制台,网址为 https://console.aws.amazon.com/codepipeline/

    管道下,选择您的管道并选择查看。该图显示了您的管道源和部署阶段。

  2. 选择以编辑管道,或继续在编辑模式下显示管道。

  3. 选择以编辑部署阶段。

  4. 添加将执行在上一个手动操作中审批的更改集的部署操作:

    1. 操作名称中,输入 Execute_Change_Set。对于操作提供程序,选择 Amazon CloudFormation

    2. 输入构件中,选择SourceArtifact

    3. 操作模式中,选择执行更改集

    4. 堆栈名称中,如下所示输入变量语法。这是为其创建更改集的堆栈的名称。

      #{DeployVariables.StackName}
    5. 更改集名称中,输入您在上一个操作中创建的更改集的名称。

      my-changeset
    6. 选择完成以保存操作。

    7. 继续管道运行。

步骤 6:添加 CloudFormation部署操作以删除堆栈

在管道中创建最后一个操作, Amazon CloudFormation 允许从输出文件中的变量中获取堆栈名称并删除堆栈。

  1. 打开 CodePipeline 控制台,网址为 https://console.aws.amazon.com/codepipeline/

    管道下,选择您的管道并选择查看。该图显示了您的管道源和部署阶段。

  2. 选择以编辑管道。

  3. 选择以编辑部署阶段。

  4. 添加将删除堆栈的部署操作:

    1. 操作名称中,选择DeleteStack。在部署提供商中,选择CloudFormation

    2. 操作模式下,选 删除堆栈

    3. 堆栈名称中,如下所示输入变量语法。这是操作将删除的堆栈的名称。

    4. 选择完成以保存操作。

    5. 选择保存以保存管道。

    管道在保存时运行。