使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何解决 CloudFormation 错误“Cannot update a stack when a custom-named resource requires replacing”(当自定义命名的资源需要替换时无法更新堆栈)?

1 分钟阅读
0

当我尝试更新 AWS CloudFormation 堆栈时,我收到类似于以下内容的错误消息: "CloudFormation cannot update a stack when a custom-named resource requires replacing.Rename 'MyResource###' and update the stack again."

简短描述

当堆栈更新尝试替换属性中包含自定义名称的资源时,将发生此错误。CloudFormation 无法替换具有自定义名称的资源,除非将该自定义名称更改为其他名称。为防止堆栈故障,在更新堆栈之前,请确保将所有具有自定义名称的资源更改为使用其他名称。

此错误的解决方法基于以下假设:

  • 您正在更新现有堆栈,而不是创建新堆栈。
  • 您正在更改现有自定义命名资源的名称,而不是创建新的自定义命名资源。

解决方法

  1. 在代码编辑器中,打开要更新的堆栈的 CloudFormation 模板。

  2. 将任何具有自定义名称的资源属性的名称或值替换为其他名称。

    **注意:**在以下示例中,myRDS 资源的 DBInstanceIdentifier 属性设置为自定义名称 PRODdb。只有将名称 PRODdb 更改为其他名称(例如 PRODdb1),才能更新 CloudFormation 堆栈。或者,在模板中省略 DBInstanceIdentifier 属性,这样 CloudFormation 就会生成一个用于数据库实例的唯一物理 ID。

    "MyRDS": {    "Type": "AWS::RDS::DBInstance",
        "Properties": {
            "DBInstanceClass": "db.m3.medium",
            "Engine": "MySQL",
            "DBInstanceIdentifier": "PRODdb",
            "AllocatedStorage": "10",
            "AutoMinorVersionUpgrade": "true",
            "BackupRetentionPeriod": "0",
        . . .
        . . .
        }
    }

    **重要事项:**重命名自定义命名的资源时,CloudFormation 会替换该资源。有关详细信息,请参阅名称类型。如果没有进行适当的备份,替换某些资源可能会导致数据丢失。有关详细信息,请参阅替换

  3. 保存对 CloudFormation 模板所做的更改,然后使用该模板更新您的堆栈

相关信息

使用 CloudFormation 堆栈将 AWS 资源作为单个设备进行管理

了解堆栈资源的更新行为

AWS 资源和属性类型参考

AWS 官方
AWS 官方已更新 1 个月前