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

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

教程:使用 Amazon CloudFormation StackSets 部署操作创建管道

在本教程中,您将使用 Amazon CodePipeline 控制台创建带有部署操作的管道,用于创建堆栈集和创建堆栈实例。管道运行时,模板会创建堆栈集,还会创建和更新部署了堆栈集的实例。

有两种方法可以管理堆栈集的权限:自我管理的 IAM 角色和托 Amazon管的 IAM 角色。本教程提供了自托管权限的示例。

要在中最有效地使用 Stackset CodePipeline,您应该清楚地了解其背后的概念 Amazon CloudFormation StackSets 及其工作原理。参见《Amazon CloudFormation 用户指南》中的StackSets 概念

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

先决条件

对于堆栈集操作,您可以使用两个不同的账户:管理账户和目标账户。在管理员账户中创建堆栈集。在目标账户中创建属于堆栈集的单个堆栈。

使用管理员账户创建管理员角色
在目标账户中创建服务角色
  • 在信任管理员账户的目标账户中创建服务角色。按照为堆栈集操作设置基本权限中的说明进行操作。您的角色必须命名为 AWSCloudFormationStackSetExecutionRole

步骤 1:上传示例 Amazon CloudFormation 模板和参数文件

为您的堆栈集模板和参数文件创建源桶。下载示例 Amazon CloudFormation 模板文件,设置参数文件,然后压缩文件,然后再上传到 S3 源存储桶。

注意

即使唯一的源文件是模板,也要确保先压缩源文件,再上传到 S3 源桶。

创建 S3 源桶
  1. 登录 Amazon Web Services Management Console 并打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/

  2. 选择创建存储桶

  3. 桶名称中,输入桶的名称。

    区域中,选择要在其中创建管道的区域。请选择创建存储桶

  4. 创建存储桶后,系统会显示成功横幅。选择转到存储桶详细信息

  5. 属性选项卡上,选择版本控制。选择启用版本控制,然后选择保存

创建 Amazon CloudFormation 模板文件
  1. 下载以下示例模板文件,用于生成堆栈集的 CloudTrail 配置:https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml.

  2. 将该文件保存为 template.yml

创建 parameters.txt 文件
  1. 创建包含部署参数的文件。参数是您要在运行时在堆栈中更新的值。以下示例文件将更新堆栈集的模板参数,以启用日志验证和全局事件。

    [ { "ParameterKey": "EnableLogFileValidation", "ParameterValue": "true" }, { "ParameterKey": "IncludeGlobalEvents", "ParameterValue": "true" } ]
  2. 将该文件保存为 parameters.txt

创建 accounts.txt 文件
  1. 创建包含账户(您要从中创建实例)的文件,如以下示例文件所示。

    [ "111111222222","333333444444" ]
  2. 将该文件保存为 accounts.txt

创建和上传源文件
  1. 将文件合并为单个 ZIP 文件。您的文件应该在您的 ZIP 文件中如下所示。

    template.yml parameters.txt accounts.txt
  2. 将 ZIP 文件上传到 S3 桶。此文件是由 “创建管道” 向导为中的部署操作创建的源项目 CodePipeline。

步骤 2:创建管道

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

  • 具有 S3 源操作的源阶段,其中源构件是您的模板文件和任何支持源文件。

  • 一个部署阶段,其中包含用于创建 Amazon CloudFormation 堆栈集的堆栈集部署操作。

  • 带有 Amazon CloudFormation 堆栈实例部署操作的部署阶段,用于在目标账户中创建堆栈和实例。

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

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

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

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

  5. 服务角色中,选择新建服务角色 CodePipeline 以允许在 IAM 中创建服务角色。

  6. 构件存储中,保留默认值。

    注意

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

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

    选择下一步

  7. 步骤 2:添加源阶段页面上,在源提供程序 中,选择 Amazon S3

  8. 中,输入您在本教程中创建的 S3 源桶,例如 BucketName。在 S3 对象键中,输入 ZIP 文件的文件路径和文件名,例如 MyFiles.zip

  9. 选择下一步

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

    选择下一步

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

    1. 部署提供程序中,选择 Amazon CloudFormation 堆栈集

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

      注意

      记下您的堆栈集名称。当您将第二个 StackSets 部署操作添加到管道中时,您将使用它。

    3. 模板路径中,输入构件名称和上传模板文件的文件路径。例如,使用默认源构件名称 SourceArtifact 输入以下内容。

      SourceArtifact::template.yml
    4. 部署目标中,输入构件名称和上传账户文件的文件路径。例如,使用默认源构件名称 SourceArtifact 输入以下内容。

      SourceArtifact::accounts.txt
    5. 部署目标中 Amazon Web Services 区域,输入一个用于部署初始堆栈实例的区域,例如us-east-1

    6. 展开部署选项。在参数中,输入构件名称和上传参数文件的文件路径。例如,使用默认源构件名称 SourceArtifact 输入以下内容。

      SourceArtifact::parameters.txt

      要将参数作为文字输入而不是文件路径,请输入以下内容:

      ParameterKey=EnableLogFileValidation,ParameterValue=true ParameterKey=IncludeGlobalEvents,ParameterValue=true
    7. 功能中,选择 CAPABILITY_IAM 和 CAPABILITY_NAMED_IAM。

    8. 权限模式中,选择 SELF_MANAGED。

    9. 失效容限百分比中,输入 20

    10. 最大并发百分比中,输入 25

    11. 选择下一步

    12. 选择创建管道。将显示您的管道。

    13. 允许您的管道运行。

步骤 3:查看初始部署

查看初始部署的资源和状态。验证部署已成功创建堆栈集后,您可以将另一个操作添加到部署阶段。

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

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

  3. 选择对 Amazon CloudFormation 管道中CloudFormationStackSet操作的操作。您的堆栈集的模板、资源和事件显示在 Amazon CloudFormation 控制台中。

  4. 在左侧导航面板中,选择StackSets。在列表中,选择新的堆栈集。

  5. 选择堆栈实例选项卡。验证已在 us-east-1 区域中为您提供的每个账户创建了一个堆栈实例。验证每个堆栈实例的状态为 CURRENT

步骤 4:添加动 CloudFormationStackInstances作

在管道中创建下一个操作 Amazon CloudFormation StackSets 以允许创建剩余堆栈实例。

在管道中创建下一操作
  1. 打开 CodePipeline 控制台,网址为 https://console.aws.amazon.com/codepipeline/

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

  2. 选择以编辑管道。管道将在编辑模式下显示。

  3. 部署阶段上,选择编辑

  4. Amazon CloudFormation 堆栈集部署操作下,选择添加操作组

  5. 编辑操作页面上,添加操作详细信息:

    1. 操作名称中,为操作输入名称。

    2. 操作提供程序中,选择 Amazon CloudFormation 堆栈实例

    3. 输入构件中,选择 SourceArtifact

    4. 堆栈集名称中,为堆栈集输入名称。这是您在第一个操作中提供的堆栈集的名称。

    5. 部署目标中,输入构件名称和上传账户文件的文件路径。例如,使用默认源构件名称 SourceArtifact 输入以下内容。

      SourceArtifact::accounts.txt
    6. 部署目标中 Amazon Web Services 区域,输入用于部署剩余堆栈实例的区域,eu-central-1例如us-east-2和如下:

      us-east2, eu-central-1
    7. 失效容限百分比中,输入 20

    8. 最大并发百分比中,输入 25

    9. 选择保存

    10. 手动发布更改。更新的管道将在“部署”阶段显示两个操作。

步骤 5:查看部署的堆栈集资源

查看堆栈集部署的资源和状态。

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

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

  3. 选择对 Amazon CloudFormation 管道中Amazon CloudFormation Stack Instances操作的操作。您的堆栈集的模板、资源和事件显示在 Amazon CloudFormation 控制台中。

  4. 在左侧导航面板中,选择StackSets。在列表中,选择您的堆栈集。

  5. 选择堆栈实例选项卡。验证已在预期区域中创建或更新您提供的每个账户的所有剩余堆栈实例。验证每个堆栈实例的状态为 CURRENT

第 6 步:更新您的堆栈集

更新您的堆栈集并将更新部署到实例。在此示例中,您还将更改您指定进行更新的部署目标。不属于更新的实例将变为已过期状态。

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

  2. 管道下,选择您的管道,然后选择编辑。在部署阶段上,选择编辑

  3. 选择编辑管道中的 Amazon CloudFormation 堆栈集操作。在描述中,使用堆栈集的新描述覆盖现有描述。

  4. 选择编辑管道中的 Amazon CloudFormation 堆栈实例操作。在部署目标中 Amazon Web Services 区域,删除创建操作时输入的us-east-2值。

  5. 保存更改。选择发布更改以运行管道。

  6. 在 Amazon CloudFormation中打开您的操作。选择 “StackSet 信息” 选项卡。在StackSet 描述中,验证是否显示了新的描述。

  7. 选择堆栈实例选项卡。在状态下,验证 us-east-2 中堆栈实例的状态为 OUTDATED