如何解决 AWS CloudFormation 错误“Cannot update a stack when a custom-named resource requires replacing”?

上次更新时间:2019 年 10 月 31 日

当我尝试更新 AWS CloudFormation 堆栈时,我收到了类似以下内容的错误消息:“CloudFormation cannot update a stack when a custom-named resource requires replacing.Rename 'MYResourceXXX' and update the stack again.” 如何解决此错误?

简短描述

通常情况下,在堆栈更新尝试使用自定义名称替换具有属性的资源时会发生此错误。AWS CloudFormation 不会替换具有自定义名称的资源,除非该自定义资源名称被更改为其他名称。要防止堆栈故障并避免错误消息,请在更新堆栈之前更改任何具有自定义名称的资源,以使用其他名称。

此错误的解决方案假设如下:

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

解决方法

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

2.    用不同的名称替换具有自定义名称的任何资源属性的名称或值。

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

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

重要提示:当您重命名某个自定义命名的资源时,AWS CloudFormation 会替换该资源。有关更多信息,请参阅名称类型。替换某些资源可能会导致没有适当备份的数据丢失。有关更多信息,请参阅替换

3.    将更改保存到您的 AWS CloudFormation 模板,然后使用该模板来更新堆栈


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?