创建具有自行管理权限的 CloudFormation StackSets - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

创建具有自行管理权限的 CloudFormation StackSets

使用自行管理权限,您可以将堆栈部署到特定区域中的特定 Amazon Web Services 账户。为此,您必须首先创建必要的 IAM 角色,以便在堆栈集的管理账户与需要部署堆栈的账户之间建立可信关系。有关更多信息,请参阅 授予自行管理的权限

注意

在完成以下步骤之一之前,请验证您的管理员账户中是否存在 IAM 角色 AWSCloudFormationStackSetExecutionRoleAWSCloudFormationStackSetAdministrationRole。要在管理员账户以外的账户中启动堆栈,请验证目标账户中是否存在 IAM 角色 AWSCloudFormationStackSetExecutionRole。有关更多信息,请参阅 授予管理员账户的所有用户管理所有目标账户中堆栈的权限

本主题中引述的模板在美国西部(俄勒冈州)区域(us-west-2)和美国东部(弗吉尼亚州北部)区域(us-east-1)内的目标账户中启用了 Amazon Config。启用 Amazon Config 模板位于以下 S3 存储桶中:https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml。您也可以在 StackSets 控制台中选择此示例模板。

创建具有自行管理权限的堆栈集(控制台)

  1. 登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

  2. 在屏幕顶部的导航栏中,选择要从中管理堆栈集的 Amazon Web Services 区域。

  3. 从导航窗格中,选择 StackSets

  4. StackSets 页面顶部,选择创建 StackSet

  5. 跳过权限以使用您之前创建的名为 AWSCloudFormationStackSetExecutionRoleAWSCloudFormationStackSetAdministrationRole 的 IAM 角色。

  6. Prerequisite - Prepare template (先决条件 – 准备模板) 下,选择 Use a sample template (使用示例模板)

  7. 选择示例模板下,从下拉菜单中选择启用 Amazon Config 模板。然后选择下一步

  8. 指定堆栈集详细信息页面上,对于堆栈集名称,请提供堆栈集的名称。堆栈集名称必须以字母字符开头,并且只能包含字母、数字和连字符。在此演练中,使用名称 my-awsconfig-stackset

  9. 对于 StackSet 描述,请提供堆栈集的描述。

  10. 参数下,请执行以下操作:

    1. 配置 Amazon Config 使用的记录器配置参数。有关这些参数的更多信息,请参阅《Amazon Config 开发人员指南》中的 Manual setup for Amazon Config

      1. 对于支持所有资源类型,请保留默认值 true,从而记录所有受支持的资源类型。

      2. 对于包含全局资源类型,保留默认值 false,从而排除 IAM 角色等全局资源。

      3. 请将如非全部支持时的资源类型列表设置为 <All>。仅在为支持所有资源类型选择了 false 时,才会添加特定的资源类型。

      4. 对于包含 Config 服务相关角色资源的区域,请将 <DeployToAnyRegion> 替换为 us-west-2。这表示仅在将堆栈部署到美国西部(俄勒冈州)区域时,才会创建名为 AWSServiceRoleForConfig 的服务相关角色。您将在此过程的后期阶段选择部署区域。

      5. 对于配置记录器记录频率,请选择连续记录或每日记录。

    2. (可选)在交付渠道配置下,配置更新和通知的交付渠道。有关 Amazon Config 中的传输通道的更多信息,请参阅《Amazon Config 开发人员指南》中的管理传输通道

    3. (可选)在交付通知下,配置 Amazon Simple Notification Service(SNS)通知。

  11. 选择下一步以继续。

  12. Configure StackSet options (配置堆栈集选项) 页面上,通过指定键/值对来添加标签。在本演练中,我们创建一个名为 Stage 的标签,其值为 Test。您应用到堆栈集的标签也将应用到堆栈创建的所有资源。有关如何在 Amazon 中使用标签的更多信息,请参阅《Amazon 账单与成本管理 User Guide》中的 Organizing and tracking costs using Amazon cost allocation tags

  13. 对于 Execution configuration(执行配置),选择 Active(激活),以使 StackSets 并发执行非冲突操作并将冲突操作排队。冲突操作结束后,StackSets 将按请求顺序启动排队的操作。

    注意

    如果有操作正在运行或已排队,StackSets 会将所有传入操作排队,即使这些操作没有冲突。在此期间,您不能更改执行设置。

  14. 如果模板包含 IAM 资源,则对于功能,请选择我确认该模板可能会创建 IAM 资源以指定您要在模板中使用 IAM 资源。有关更多信息,请参阅 确认 CloudFormation 模板中的 IAM 资源

  15. 选择下一步

  16. 设置部署选项页面上,对于向堆栈集添加堆栈,选择部署新堆栈

  17. 对于 Accounts (账户),选择 Deploy stacks in accounts (在账户中部署堆栈)。在文本框中粘贴您的目标 Amazon Web Services 账户编号,并使用逗号分隔多个编号。

  18. 对于 Specify regions (指定区域),选择 美国东部(弗吉尼亚北部)地区。对 美国西部(俄勒冈)区域 重复此操作。选择 美国西部(俄勒冈)区域 旁边的向上箭头,将其移至列表中的第一个条目。Specify regions (指定区域) 下的区域顺序确定了其部署顺序。

    默认情况下,CloudFormation 将在第一个区域内的指定账户中部署堆栈,然后移到下一个区域,依此类推,前提是区域的部署失败不超过指定的容错能力。

  19. 对于部署选项,请执行以下操作:

    • 对于 Maximum concurrent accounts(最大并发账户数),请保留 Number(数量)和 1 的默认值。

      这意味着,CloudFormation 一次仅在一个账户中部署您的堆栈。

    • 对于 Failure tolerance (容错),请保留 Number (数量)0 的默认值。

      这意味着,只要您指定区域之一中有一个堆栈部署失败,CloudFormation 就会停止当前区域中的部署并取消剩余区域中的部署。

    • 对于区域并发,请选择顺序(默认)或并行来确定指定区域的堆栈集部署顺序。

    • 对于并发模式,请根据需要更新并发模式,或跳到下一步。

  20. 选择下一步

  21. 审核页面上,审核您的选择。要进行更改,请在相关部分选择编辑

  22. 当您准备好创建堆栈集时,选择 Submit(提交)。

    CloudFormation 开始创建您的堆栈集。在您选择 Submit (提交) 时打开的堆栈集详细信息页面中查看堆栈集中堆栈创建的进度和状态。

创建具有自行管理权限的堆栈集(Amazon CLI)

使用 Amazon CLI 命令创建堆栈集时,您可以运行两个单独的命令:create-stack-set(用于上传模板和创建堆栈集容器)和 create-stack-instances(用于在堆栈集中创建堆栈)。

  1. 首先,运行以下 create-stack-set 命令以上传启用 Amazon Config 的示例模板。对于 --template-url 选项,请提供模板所在 Amazon S3 存储桶的 URL。在该例中,我们将 my-awsconfig-stackset 用作 --stack-set-name 选项的值。该 --parameters 选项可与我们提供的 EnableAWSConfig.yml 模板配合使用。如果您使用自己的模板,请根据需要调整命令。

    aws cloudformation create-stack-set \ --stack-set-name my-awsconfig-stackset \ --template-url https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/EnableAWSConfig.yml \ --parameters ParameterKey=ServiceLinkedRoleRegion,ParameterValue="us-west-2" ParameterKey=RecordingFrequency,ParameterValue="DAILY"
  2. 在您的 create-stack-set 命令完成后,运行 list-stack-sets 命令以查看您的堆栈集是否已创建。您应在结果中看到新的堆栈集。

    aws cloudformation list-stack-sets
  3. 使用 create-stack-instances 命令将堆栈添加到堆栈集中。在本演练中,我们使用 us-west-2us-east-1 作为 --regions 选项的值。

    使用 --operation-preferences 选项设置并发账户处理和其他部署首选项。此示例使用基于计数的设置。请注意,MaxConcurrentCount 不得大于 FailureToleranceCount + 1。对于基于百分比的设置,请改用 FailureTolerancePercentageMaxConcurrentPercentage

    aws cloudformation create-stack-instances \ --stack-set-name my-awsconfig-stackset \ --accounts account_ID_1 account_ID_2 \ --regions us-west-2 us-east-1 \ --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0

    有关更多信息,请参阅《Amazon CloudFormation API 参考》中的 CreateStackInstances

  4. 使用在 create-stack-instances 输出中返回的 operation-id 以及以下 describe-stack-set-operation 命令,验证堆栈是否已成功创建。

    aws cloudformation describe-stack-set-operation \ --stack-set-name my-awsconfig-stackset \ --operation-id operation_ID