You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CloudFormation资源的DeletionPolicy从Retain改为Delete

解决CloudFormation中无法更新资源DeletionPolicy的问题

问题背景

已部署的CloudFormation栈中,某IAM角色(ResourceA)的DeletionPolicy设为Retain,尝试将其改为Delete或直接移除该属性后,执行Serverless部署时收到「变更集未包含任何待部署的变更」提示,无法完成修改。

当前资源模板:

ResourceA:
  Type: AWS::IAM::Role
  DeletionPolicy: Retain
  Properties:
    RoleName: RoleName-${self:custom.env.stage}
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: sts:AssumeRole

期望修改为(二选一即可):

# 方案1:显式设置为Delete
ResourceA:
  Type: AWS::IAM::Role
  DeletionPolicy: Delete
  Properties:
    RoleName: RoleName-${self:custom.env.stage}
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: sts:AssumeRole
# 方案2:移除DeletionPolicy(默认即为Delete)
ResourceA:
  Type: AWS::IAM::Role
  Properties:
    RoleName: RoleName-${self:custom.env.stage}
    AssumeRolePolicyDocument:
      Version: '2012-10-17'
      Statement:
        - Effect: Allow
          Principal:
            Service: events.amazonaws.com
          Action: sts:AssumeRole

原因分析

DeletionPolicy属于CloudFormation的资源元数据属性,而非资源的核心配置属性。CloudFormation在生成变更集时,默认不会检测该属性的修改,因此直接修改模板后执行部署,会被判定为无变更。

解决方案

方法1:通过AWS控制台直接修改(快速操作)

  1. 登录AWS CloudFormation控制台,找到目标栈
  2. 切换到「资源」标签,定位到ResourceA(IAM角色资源)
  3. 点击资源右侧的「操作」→「修改删除策略」
  4. 选择「Delete」并保存,修改即时生效

方法2:通过Serverless+CloudFormation替换资源(代码化操作)

如果需要通过代码或自动化流程修改,可通过替换资源的方式触发更新:

  1. 临时修改模板中的资源逻辑ID(比如将ResourceA改为ResourceA-New),同时设置DeletionPolicy: Delete(或移除该属性)
  2. 执行serverless deploy,此时CloudFormation会创建新的IAM角色,原角色因Retain策略会保留在AWS账户中
  3. 验证新角色正常提供服务后,手动删除原Retain策略的IAM角色
  4. 将模板中的资源逻辑ID改回ResourceA,再次执行serverless deploy,新部署的资源将使用默认的Delete策略

方法3:使用AWS CLI强制替换资源

通过CLI命令强制触发资源替换,让CloudFormation应用新的DeletionPolicy:

aws cloudformation update-stack \
  --stack-name YOUR_STACK_NAME \
  --use-previous-template \
  --resources-to-replace ResourceA

执行命令后,CloudFormation会生成变更集,确认替换资源即可完成修改。替换后,新资源会使用模板中设置的DeletionPolicy(或默认的Delete)。


内容的提问来源于stack exchange,提问作者Gaurav Thantry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:45:51