使用 StackSets 部署到多个区域和账户
1. 介绍 StackSets
CloudFormation 堆栈部署的结果通常是一组资源,它们被组合在一个堆栈中。而 StackSets 可以部署到目标区域,甚至是账户(无论是在你的 AWS 组织内,还是单独的账户)。
每个 StackSet 由一个或多个堆栈组成,这些堆栈由相同的模板配置而来,被称为堆栈实例,它们分布在不同的账户和区域。
这里涉及到两个重要概念:管理员账户和目标账户。管理员账户用于管理 StackSets,创建或更新 StackSets 时需要使用该账户,并且该账户必须被授予在其他账户中创建堆栈的权限(通过 IAM 处理)。而创建堆栈的账户则是目标账户。如果只在单个账户的不同区域部署 StackSets,那么管理员账户和目标账户是相同的。
如果某个堆栈实例创建失败,不会影响其他堆栈实例。例如,当部署的堆栈包含某些在部分 AWS 区域不支持的服务资源时,这些区域的堆栈创建会失败,CloudFormation 会进行回滚,但只有受影响的堆栈实例会被回滚,其他实例仍会正常部署,这就是失败容错机制。
删除 StackSet 时,所有堆栈实例都应被删除。若要保留部分堆栈实例,需选择保留选项将其从 StackSet 中删除,这样堆栈实例会从 StackSet 移除,但堆栈本身会保留。为防止误删,AWS 不允许直接删除非空的 StackSet,必须先删除堆栈实例,待 StackSet 为空后才能删除。
StackSet 操作选项包括最大并发账户数、失败容错和保留堆栈:
- 最大并发账户数 :定义每个账户的并行部署数量。例