如何将CloudFormation StackSet迁移至其他AWS账户?
AWS CloudFormation StackSet跨账户迁移方案(保留已部署资源)
前置检查
- 确认账户A、账户B、目标部署账户1的IAM权限配置正常:账户B需具备StackSet管理权限,且对账户1的CloudFormation部署权限已完成配置
- 备份账户A中目标StackSet的所有配置,包括CloudFormation模板、参数值、标签、部署配置、权限模型,确保和账户1中已部署的资源配置完全一致
- 确认所有待迁移StackSet的资源保留策略已设置为
Retain
迁移步骤
- 步骤1:导出账户A中StackSet及对应实例的完整配置,命令示例:
# 导出StackSet核心配置 aws cloudformation describe-stack-set --stack-set-name <你的StackSet名称> --query 'StackSet' --profile 账户A的配置名 # 导出账户1对应的Stack实例配置 aws cloudformation describe-stack-instance --stack-set-name <你的StackSet名称> --stack-instance-account <账户1的账号ID> --stack-instance-region <部署区域> --profile 账户A的配置名
- 步骤2:在账户A中移除账户1对应的Stack实例,必须指定保留资源参数,仅解除账户A的StackSet对实例的管理关系,不会删除账户1的任何资源:
aws cloudformation delete-stack-instances --stack-set-name <你的StackSet名称> --accounts <账户1的账号ID> --regions <部署区域> --retain-stacks --profile 账户A的配置名
注意:操作前务必再次确认
--retain-stacks参数已添加,避免误删资源
- 步骤3:在账户B中创建和原StackSet配置100%一致的新StackSet,模板、参数、标签、权限模型、部署选项必须完全匹配,避免后续导入出现配置偏移
- 步骤4:在账户B的新StackSet中导入账户1的现有Stack作为实例,仅建立管理关联,不会触发重新部署,命令示例:
aws cloudformation import-stacks-to-stack-set --stack-set-name <新StackSet名称> --stack-ids "arn:aws:cloudformation:<部署区域>:<账户1的账号ID>:stack/<原Stack实例对应的本地Stack名称>/<Stack ID>" --profile 账户B的配置名
Stack的ARN可在账户1的CloudFormation控制台查询,或通过账户1的配置执行aws cloudformation describe-stacks获取
- 步骤5:迁移完成后对新StackSet执行配置漂移检测,确认导入的实例和StackSet配置完全匹配,后续即可正常通过账户B的StackSet管理账户1的资源
注意事项
- 如果原StackSet使用组织服务托管权限,需要先确保账户B已被配置为组织的CloudFormation StackSet管理员账号,或拥有对应组织层级的部署权限
- 迁移完成前不要修改账户1中任何现有资源的配置,避免配置不匹配导致导入失败
- 若涉及多区域部署,需要按区域逐个执行Stack实例的移除和导入操作
内容的提问来源于stack exchange,提问作者DenCowboy
相关产品推荐
相关产品推荐

