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.    カスタム名を持つすべてのリソースプロパティの名前または値を別の名前に置き換えます。

;注: 次の例では、 DBInstanceIdentifier プロパティー ( MyRDS リソース内) は、カスタム名 PRODdb に設定されています。PRODdb の名前が PRODdb1 などの別の名前に変更されるまでは、AWS CloudFormation スタックが正常に更新されません。または、テンプレートから DBInstanceIdentifier プロパティを省略することもできます。このようにして、AWS CloudFormation は DB インスタンスに使用する一意の物理 ID を生成します。

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

重要:カスタムのリソース名を変更すると、AWS CloudFormation がリソースを置き換えます。詳しくは、Name タイプを参照してください。特定のリソースを交換すると、適切なバックアップがない場合にデータが失われる可能性があります。詳細については、置換を参照してください。

3.    AWS CloudFormation テンプレートへの変更を保存してから、そのテンプレートを使用してスタックを更新します