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

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

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

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

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

重要

作为创建管道的一部分,客户提供的 S3 工件存储桶将 CodePipeline 用于项目。(这与用于 S3 源操作的存储桶不同。) 如果 S3 工件存储桶与您的管道账户位于不同的账户中,请确保 S3 工件存储桶归其所有 AWS 账户 ,该存储桶是安全且可靠的。

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

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

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

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

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

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

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

  1. 导航到您所在区域的示例模板页面。例如,对应于 us-west-2 的页面位于 https://docs.aws.amazon.com/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. 将模板文件上传到您的 AWS CodeCommit 存储库。您必须将解压缩和编辑的模板文件上传到存储库的根目录。

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

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

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

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

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

    documentdb_full_stack.yaml

步骤 2:创建管道

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

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

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

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

使用向导创建管道
  1. 登录 AWS 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 存储桶。创建或编辑管道时,管道区域中必须有一个工件存储桶,并且每个运行操作的 AWS 区域都必须有一个工件存储桶。

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

    选择下一步

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

    1. 源提供程序中,选择 AWS 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. 选择 Create pipeline(创建管道)。允许您的管道运行。您的两阶段管道已完成并准备好添加其他阶段。

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

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

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

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

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

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

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

    1. 操作名称中,输入 Change_Set。对于操作提供程序,选择 AWS 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. 在创建更改集的部署操作之后添加手动审批操作。此操作允许您在管道执行更改集 AWS CloudFormation 之前验证中已创建的资源变更集。

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

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

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

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

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

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

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

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

    2. 输入构件中,选择SourceArtifact

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

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

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

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

    7. 继续管道运行。

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

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

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

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

  2. 选择以编辑管道。

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

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

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

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

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

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

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

    管道在保存时运行。