CloudFormation中能否迁移CloudFront资源至嵌套栈而无需删除重建?
无需删除重建迁移CloudFront到嵌套栈的方案
要避免删除CloudFront分发导致停机,你可以通过CloudFormation的资源导入功能,将现有CloudFront资源迁移到嵌套栈中,具体步骤如下:
步骤1:准备嵌套栈模板
- 导出现有CloudFront分发的完整配置:
使用AWS CLI获取分发详情:aws cloudfront get-distribution --id <你的分发ID> - 将获取到的配置整理为独立的CloudFormation/SAM模板,确保模板中
AWS::CloudFront::Distribution的所有属性(Origin、CacheBehavior、自定义域名、证书等)与现有分发完全一致。 - 在嵌套模板的CloudFront资源中添加
DeletionPolicy: Retain,防止后续操作误删资源:CDNInNested: Type: AWS::CloudFront::Distribution DeletionPolicy: Retain Properties: # 完全匹配现有分发的配置
步骤2:将现有CloudFront导入到嵌套栈
通过CloudFormation的资源导入功能,把现有分发归属到新建的嵌套栈:
- 控制台操作:
- 进入CloudFormation控制台,选择「创建栈」→「导入资源到栈」。
- 上传准备好的嵌套模板,指定栈名称(如
CDNNestedStack)。 - 在导入资源环节,选择资源类型
AWS::CloudFront::Distribution,填写逻辑资源ID(对应嵌套模板中的CDNInNested)和物理资源ID(你的CloudFront分发ID)。 - 完成栈创建,此时现有CloudFront已由嵌套栈管理。
- CLI操作:
aws cloudformation create-stack \ --stack-name CDNNestedStack \ --template-body file://nested-cdn-template.yml \ --resources-to-import '[{ "ResourceType": "AWS::CloudFront::Distribution", "LogicalResourceId": "CDNInNested", "ResourceIdentifier": {"Id": "<你的分发ID>"} }]'
步骤3:更新主栈替换资源引用
- 修改主模板:
- 删除原有的
CDN资源(类型为AWS::CloudFront::Distribution)。 - 新增同名
CDN资源,类型改为AWS::Serverless::Application,指向刚才创建的嵌套栈:CDN: Type: AWS::Serverless::Application Properties: Location: # 填写嵌套模板的S3路径、本地路径或Serverless应用仓库ARN ApplicationId: arn:aws:serverlessrepo:us-east-1:xxxxxx:applications/xxxxxx Parameters: # 按需传递嵌套栈所需参数
- 删除原有的
- 部署主栈,此时CloudFront分发不会被修改或删除,仅主栈的资源引用更新为嵌套栈。
关键注意事项
- 导入资源时,嵌套模板的CloudFront配置必须与现有分发完全一致,否则导入会失败。若有配置差异,需先调整现有分发或模板使其匹配。
- 整个迁移过程不会导致CloudFront分发重启或停机,仅变更资源的管理归属。
- 确保主栈和嵌套栈的IAM权限配置正确,主栈需有调用嵌套栈的权限,嵌套栈需有管理CloudFront的权限。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

