AWS CloudFormation スタックを更新しようとすると、次のようなエラーメッセージが表示されます。 「CloudFormationは、カスタム名のリソースを置き換える必要がある場合、スタックを更新できません。'MyResource###' の名前を変更してから、スタックを再度更新してください。」
簡単な説明
スタックの更新がカスタム名を持つプロパティを含むリソースを置き換えようとしたときに、このエラーが発生します。CloudFormation は、カスタム名が別の名前に変更されない限り、カスタム名を持つリソースを置き換えません。スタックの障害を防ぐため、スタックを更新する前に、必ずカスタム名の付いたリソースを別の名前に変更してください。
このエラーの解決方法は次のことを前提としています。
- 既存スタックの更新であり、新規スタックの作成ではない。
- 既存のカスタム名付きリソースの名前変更であり、新しいカスタム名付きリソースの作成ではない。
解決策
-
コードエディタで、更新するスタックの CloudFormation テンプレートを開きます。
-
カスタム名を持つリソースプロパティの名前または値で、別の名前を使用するようにします。
注: 次の例では、MyRDS リソースの DBInstanceIdentifier プロパティが ProdDB というカスタム名に設定されています。CloudFormation スタックは、ProdDB という名前が ProdDB1 などの別の名前に変更されるまで更新できません。または、テンプレートから DBInstanceIdentifier プロパティを省略すると、CloudFormation が DB インスタンスに使用する一意の物理 ID を生成するようになります。
"MyRDS": { "Type": "AWS::RDS::DBInstance",
"Properties": {
"DBInstanceClass": "db.m3.medium",
"Engine": "MySQL",
"DBInstanceIdentifier": "PRODdb",
"AllocatedStorage": "10",
"AutoMinorVersionUpgrade": "true",
"BackupRetentionPeriod": "0",
. . .
. . .
}
}
重要: カスタム名の付いたリソースの名前を変更すると、そのリソースは CloudFormation により置き換えられます。詳細については、「Name 型」を参照してください。特定のリソースを置き換えると、適切なバックアップが行われず、データが失われる可能性があります。詳細については、「置き換え」を参照してください。
-
CloudFormation テンプレートに変更を保存したら、そのテンプレートを使用してスタックを更新します。
関連情報
CloudFormation スタックで AWS リソースを単一ユニットとして管理する
スタックリソース更新の動作について
AWS リソースとプロパティタイプのリファレンス