AWS CloudFormation使用问题:手动删除资源恢复与VPC默认资源获取
问题1:手动删除CloudFormation栈管理的子网后,无模板变更如何恢复资源
- 根本原因:CloudFormation默认执行更新栈操作时,仅对比当前模板和上一次部署的模板配置差异,不会主动校验云上实际资源的状态,因此手动删除资源后无模板变更的情况下会判定无更新内容。
- 解决步骤:
- 进入目标CloudFormation栈的详情页,切换到漂移检测标签页,点击「检测漂移」,等待检测完成。
- 检测完成后,被手动删除的子网会被标记为
DELETED漂移状态,选中该资源后点击「修复漂移」,CloudFormation会直接按照原有模板的配置重新创建该子网,全程无需修改原有模板。
若遇到该资源类型不支持自动漂移修复的情况,可选择创建变更集时使用「使用当前模板」,为栈临时添加一个无业务影响的自定义标签,提交更新后再删除该标签即可触发资源同步,该操作同样不需要修改原有模板。
问题2:CloudFormation创建VPC生成的默认路由表、NACL相关问题
① 为什么无法直接使用这些默认资源
通过AWS::EC2::VPC资源创建VPC时,AWS侧自动生成的默认路由表、默认NACL、默认安全组等资源,默认不属于当前CloudFormation栈的管理范围,栈的资源清单不会收录这些自动生成的资源,因此无法直接通过!Ref等引用方式调用未被栈纳管的资源。
② 如何获取默认路由表、NACL的ID
可以直接通过Fn::GetAtt函数读取VPC资源的内置返回属性获取对应ID,不需要额外的调用或配置:
- 获取默认路由表ID:假设你模板中定义的VPC逻辑名为
MyVPC,使用语法为!GetAtt MyVPC.DefaultRouteTableId - 获取默认NACL ID:语法为
!GetAtt MyVPC.DefaultNetworkAclId
你可以直接将上述返回值用在子网路由表关联、NACL关联等资源配置中,和引用自定义路由表/NACL的方式完全一致。
内容的提问来源于stack exchange,提问作者Roshani
相关产品推荐
相关产品推荐

