亚马逊AWS官方博客

使用 AWS CloudFormation StackSets 跨多个 AWS 账户和区域配置资源

AWS CloudFormation 可帮助 AWS 客户实施基础设施即代码模型。客户现在无需手动设置自己的环境和应用程序,他们可以生成一个模板,然后使用它来创建所有必需的资源 (统称为 CloudFormation 堆栈)。此模型彻底消除了人工错误的可能,提高了效率,能够确保始终一致的配置。

今天,我准备为大家介绍一个让 CloudFormation 变得更加有用的新功能。此功能可帮助您应对在包含多个 AWS 账户和/或 AWS 区域的情况下使用基础架构即代码时的挑战。快速回顾:

账户 – 正如前面提到的那样,很多组织使用大量的 AWS 账户,通常用 AWS Organizations 将这些账户组织为分层结构,分组为不同的组织部门 (OU) (阅读 AWS Organizations – 基于策略的多 AWS 账户管理了解更多信息)。我们的客户使用多个账户满足业务部门、应用程序和开发人员所需。他们通常为每一个应用程序的开发、测试、生产前调试及生产阶段创建不同的账户。

区域 – 客户也可以充分利用数量众多 (一直在增长) 的 AWS 区域。他们构建跨越两个或更多区域的全球应用程序,实施精巧的多区域灾难恢复模型,实时复制 S3AuroraPostgreSQLMySQL 数据,为依据国家和地区法规存储和处理敏感数据选择位置。

多账户和多区域的扩展对管理和一致性带来了新的挑战。客户告诉我们,他们希望确保每一个新账户都按照其内部标准进行设置。首先他们需要一致、可靠地设置 IAM 用户和角色、VPC 和 VPC 子网、安全组、配置规则、日志记录和 AWS Lambda 函数。

介绍 StackSet
为了满足这些重要的客户需求,我们今天推出 CloudFormation StackSet。现在通过几次单击操作,即可在 CloudFormation 模板中定义 AWS 资源配置,然后跨多个 AWS 账户和/或区域进行部署。您可以用它来设置 AWS 功能的基准水平,以满足上述跨账户和跨区域情形的需要。设置之后,可将覆盖范围轻松扩展到更多的账户和区域。

该功能始终只适用于多账户情形。管理员账户 拥有一个或多个 StackSet,用于控制对一个或多个目标账户 的部署。管理员账户必须包含一个可担任的 IAM 角色,目标账户必须信任管理员账户。要了解具体的操作方法,请阅读 StackSet 文档中的先决条件

每个 StackSet 都引用一个 CloudFormation 模板,它包含一系列账户和区域。所有操作都适用于 StackSet 中账户和区域的叉积。如果 StackSet 引用三个账户 (A1、A2 和 A3) 和四个区域 (R1、R2、R3 和 R4),则有 12 个目标:

  • 区域 R1:账户 A1、A2 和 A3。
  • 区域 R2:账户 A1、A2 和 A3。
  • 区域 R3:账户 A1、A2 和 A3。
  • 区域 R4:账户 A1、A2 和 A3。

部署模板按账户/区域对启动 CloudFormation 堆栈的创建。模板按顺序部署到区域 (您控制顺序),再部署到区域中的多个账户 (您控制并行量)。您可以设置错误阈值,以便在堆栈创建失败时终止部署。

您可以使用现有 CloudFormation 模板 (注意确保它们已准备好跨账户和区域工作)、创建新模板,或使用我们提供的示例模板。我们还要发布对 AWS 分区 (除了中国的几个区域外的其他所有公共区域) 的支持,希望不久将扩展到其他区域。

使用 StackSet
您可以从 CloudFormation 控制台、通过 CloudFormation API 或使用命令行创建和部署 StackSet。

如果使用控制台,首先单击 Create StackSet。我可以使用自己的模板,也可以使用一个示例模板。我使用最后一个示例 (添加配置规则加密卷):

单击 View template 了解模板及规则:

为 StackSet 提供名称。我选择的模板接受可选参数,可以现在输入:

接下来,选择账户和区域。我可以直接输入账号,引用 AWS 组织单元或上传一组账号:

我可以设置区域并控制部署顺序:

我还可以设置部署选项。完成后,单击 Next 继续:

我可以向 StackSet 添加标签。它们将应用于部署期间创建的 AWS 资源:

部署开始,我可以从控制台中跟踪状态:

我可以打开“Stacks”部分查看每个堆栈。开始时,每个堆栈的状态都是 OUTDATED,这表明模板尚未部署到堆栈;成功部署后,状态变为 CURRENT。如果无法删除某个堆栈,其状态将变为 INOPERABLE

初始部署完成后,可以单击 Manage StackSet 添加更多账户和/或区域来创建更多堆栈:

现在提供
这项新功能现已推出,您可以立即开始使用,无需额外费用 (只为您自己创建的 AWS 资源付费)。

Jeff

另外,如果您创建了一些有用的模板,愿与其他 AWS 用户分享,请向我们的 AWS 实验室 GitHub 存储库发送提交请求。