如何解决 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 模板的更改,然后使用该模板来更新堆栈


这篇文章对您有帮助吗?


您是否需要账单或技术支持?