教程:使用 AWS CloudFormation StackSets 部署操作创建管道
在本教程中,您将使用 AWS CodePipeline 控制台创建带有部署操作的管道,以创建堆栈集和创建堆栈实例。管道运行时,模板会创建堆栈集,还会创建和更新部署了堆栈集的实例。
重要
作为创建管道的一部分,CodePipeline 将使用客户提供的 S3 构件存储桶来存放构件。(这与用于 S3 源操作的存储桶不同。) 如果 S3 构件存储桶所在的账户与您的管道账户不同,请确保 S3 构件存储桶归 AWS 账户所有,并且安全可靠。
有两种方法可以管理对堆栈集的权限:自托管 IAM 角色和 AWS 托管 IAM 角色。本教程提供了自托管权限的示例。
要在 CodePipeline 中最有效地使用 Stacksets,您应清楚了解 CloudFormation Stacksets 背后的概念及其工作原理。请参阅 AWS CloudFormation 用户指南 中的 Stacksets 概念。
主题
先决条件
对于堆栈集操作,您可以使用两个不同的账户:管理账户和目标账户。在管理员账户中创建堆栈集。在目标账户中创建属于堆栈集的单个堆栈。
使用管理员账户创建管理员角色
-
按照为堆栈集操作设置基本权限中的说明进行操作。您的角色必须命名为
AWSCloudFormationStackSetAdministrationRole。
在目标账户中创建服务角色
-
在信任管理员账户的目标账户中创建服务角色。按照为堆栈集操作设置基本权限中的说明进行操作。您的角色必须命名为
AWSCloudFormationStackSetExecutionRole。
步骤 1:上传示例 AWS CloudFormation 模板和参数文件
为您的堆栈集模板和参数文件创建源桶。下载示例 AWS CloudFormation 模板文件,设置参数文件,压缩文件,然后上传到 S3 源桶。
注意
即使唯一的源文件是模板,也要确保先压缩源文件,再上传到 S3 源桶。
创建 S3 源桶
登录到 AWS 管理控制台,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
选择创建桶。
-
在桶名称中,输入桶的名称。
在区域中,选择要在其中创建管道的区域。请选择创建存储桶。
-
创建存储桶后,系统会显示成功横幅。选择转到存储桶详细信息。
-
在属性选项卡上,选择版本控制。选择启用版本控制,然后选择保存。
创建 AWS CloudFormation 模板文件
-
下载以下示例模板文件,用于为堆栈集生成 CloudTrail 配置:https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSCloudtrail.yml
。 -
将该文件保存为
template.yml。
创建 parameters.txt 文件
-
创建包含部署参数的文件。参数是您要在运行时在堆栈中更新的值。以下示例文件将更新堆栈集的模板参数,以启用日志验证和全局事件。
[ { "ParameterKey": "EnableLogFileValidation", "ParameterValue": "true" }, { "ParameterKey": "IncludeGlobalEvents", "ParameterValue": "true" } ] -
将该文件保存为
parameters.txt。
创建 accounts.txt 文件
-
创建包含账户(您要从中创建实例)的文件,如以下示例文件所示。
[ "111111222222","333333444444" ] -
将该文件保存为
accounts.txt。
创建和上传源文件
-
将文件合并为单个 ZIP 文件。您的文件应该在您的 ZIP 文件中如下所示。
template.yml parameters.txt accounts.txt -
将 ZIP 文件上传到 S3 桶。此文件是由创建管道向导针对您在 CodePipeline 中的部署操作创建的源构件。
步骤 2:创建管道
在此部分中,您将使用以下操作创建管道:
-
具有 S3 源操作的源阶段,其中源构件是您的模板文件和任何支持源文件。
-
具有 CloudFormation 堆栈集部署操作的部署阶段,部署操作将创建堆栈集。
-
具有 CloudFormation 堆栈实例部署操作的部署阶段,部署操作将在目标账户中创建堆栈和实例。
创建具有 CloudFormationStackSet 操作的管道
通过以下网址登录AWS 管理控制台并打开 CodePipeline 控制台:http://console.aws.amazon.com/codesuite/codepipeline/home
。 -
在欢迎页面、入门页面或管道页面上,选择创建管道。
-
在步骤 1:选择创建选项页面上的创建选项下,选择构建自定义管道选项。选择下一步。
-
在步骤 2:选择管道设置的管道名称中,输入
MyStackSetsPipeline。 -
在本教程中,为管道类型选择 V1。也可以选择 V2;但请注意,不同管道类型具有不同的特性和价格。有关更多信息,请参阅 管道类型。
-
在服务角色中,选择新建服务角色,以允许 CodePipeline 在 IAM 中创建服务角色。
-
在构件存储中,保留默认值。
注意
这不是源代码的源存储桶。这是管道的项目存储。每个管道都需要一个单独的构件存储,例如 S3 存储桶。当您创建或编辑管道时,管道区域中必须有一个构件桶,每个运行操作的 AWS 区域也必须有一个构件桶。
有关更多信息,请参阅输入和输出构件和CodePipeline 管道结构参考。
选择下一步。
-
在步骤 3:添加源阶段页面上,在源提供程序中,选择 Amazon S3。
-
在桶中,输入您在本教程中创建的 S3 源桶,例如
BucketName。在 S3 对象键中,输入 ZIP 文件的文件路径和文件名,例如MyFiles.zip。 -
选择下一步。
-
在步骤 4:添加构建阶段中,选择跳过构建阶段,并通过再次选择跳过接受警告消息。
选择下一步。
-
在步骤 5:添加测试阶段中,选择跳过测试阶段,并通过再次选择跳过接受警告消息。
选择下一步。
-
在步骤 6:添加部署阶段中:
-
在部署提供程序中,选择 AWS CloudFormation 堆栈集。
-
在堆栈集名称中,为堆栈集输入名称。这是模板将创建的堆栈集的名称。
注意
记下您的堆栈集名称。在向管道添加另一个 Stacksets 部署操作时,您将使用此名称。
-
在模板路径中,输入构件名称和上传模板文件的文件路径。例如,使用默认源构件名称
SourceArtifact输入以下内容。SourceArtifact::template.yml -
在部署目标中,输入构件名称和上传账户文件的文件路径。例如,使用默认源构件名称
SourceArtifact输入以下内容。SourceArtifact::accounts.txt -
在部署目标 AWS 区域中,输入一个用于部署初始堆栈实例的区域,例如
us-east-1。 -
展开部署选项。在参数中,输入构件名称和上传参数文件的文件路径。例如,使用默认源构件名称
SourceArtifact输入以下内容。SourceArtifact::parameters.txt要将参数作为文字输入而不是文件路径,请输入以下内容:
ParameterKey=EnableLogFileValidation,ParameterValue=true ParameterKey=IncludeGlobalEvents,ParameterValue=true -
在功能中,选择 CAPABILITY_IAM 和 CAPABILITY_NAMED_IAM。
-
在权限模式中,选择 SELF_MANAGED。
-
在失效容限百分比中,输入
20。 -
在最大并发百分比中,输入
25。 -
选择下一步。
-
在步骤 7:审核中,选择创建管道。将显示您的管道。
-
允许您的管道运行。
-
步骤 3:查看初始部署
查看初始部署的资源和状态。验证部署已成功创建堆栈集后,您可以将另一个操作添加到部署阶段。
查看资源
在 https://console.aws.amazon.com/codepipeline/
打开 CodePipeline 控制台。 -
在管道下,选择您的管道并选择查看。该图显示了您的管道源和部署阶段。
-
在管道中的 CloudFormationStackSet 操作上选择 CloudFormation 操作。您的堆栈集的模板、资源和事件显示在 CloudFormation 控制台中。
-
在左侧导航面板中,选择 Stacksets。在列表中,选择新的堆栈集。
-
选择堆栈实例选项卡。验证已在 us-east-1 区域中为您提供的每个账户创建了一个堆栈实例。验证每个堆栈实例的状态为
CURRENT。
步骤 4:添加 CloudFormationStackInstances 操作
在管道中创建下一操作,以允许 CloudFormation StackSets 创建剩余堆栈实例。
在管道中创建下一操作
-
在 https://console.aws.amazon.com/codepipeline/
打开 CodePipeline 控制台。 在管道下,选择您的管道并选择查看。该图显示了您的管道源和部署阶段。
-
选择以编辑管道。管道将在编辑模式下显示。
-
在部署阶段上,选择编辑。
-
在 AWS CloudFormation 堆栈集部署操作下,选择添加操作组。
-
在编辑操作页面上,添加操作详细信息:
-
在操作名称中,为操作输入名称。
-
在操作提供程序中,选择 AWS CloudFormation 堆栈实例。
-
在输入构件下,选择 SourceArtifact。
-
在堆栈集名称中,为堆栈集输入名称。这是您在第一个操作中提供的堆栈集的名称。
-
在部署目标中,输入构件名称和上传账户文件的文件路径。例如,使用默认源构件名称
SourceArtifact输入以下内容。SourceArtifact::accounts.txt -
在部署目标 AWS 区域中,输入用于部署剩余堆栈实例的区域,例如
us-east-2和eu-central-1,如下所示:us-east2, eu-central-1 -
在失效容限百分比中,输入
20。 -
在最大并发百分比中,输入
25。 -
选择保存。
-
手动发布更改。更新的管道将在“部署”阶段显示两个操作。
-
步骤 5:查看部署的堆栈集资源
查看堆栈集部署的资源和状态。
查看资源
在 https://console.aws.amazon.com/codepipeline/
打开 CodePipeline 控制台。 -
在管道下,选择您的管道,然后选择查看。该图显示了您的管道源和部署阶段。
-
在管道中的
AWS CloudFormation Stack Instances操作上选择 CloudFormation 操作。您的堆栈集的模板、资源和事件显示在 CloudFormation 控制台中。 -
在左侧导航面板中,选择 Stacksets。在列表中,选择您的堆栈集。
-
选择堆栈实例选项卡。验证已在预期区域中创建或更新您提供的每个账户的所有剩余堆栈实例。验证每个堆栈实例的状态为
CURRENT。
第 6 步:更新您的堆栈集
更新您的堆栈集并将更新部署到实例。在此示例中,您还将更改您指定进行更新的部署目标。不属于更新的实例将变为已过期状态。
在 https://console.aws.amazon.com/codepipeline/
打开 CodePipeline 控制台。 -
在管道下,选择您的管道,然后选择编辑。在部署阶段上,选择编辑。
-
选择编辑管道中的 AWS CloudFormation 堆栈集操作。在描述中,使用堆栈集的新描述覆盖现有描述。
-
选择编辑管道中的 AWS CloudFormation 堆栈实例操作。在部署目标 AWS 区域中,删除创建操作时输入的
us-east-2值。 -
保存更改。选择发布更改以运行管道。
-
在 CloudFormation 中打开您的操作。选择堆栈集信息选项卡。在堆栈集描述中,验证已显示新的描述。
-
选择堆栈实例选项卡。在状态下,验证 us-east-2 中堆栈实例的状态为
OUTDATED。