DeletionPolicy
属性
DeletionPolicy
属性を使用すると、スタックが削除された際にリソースを保持し、場合によってはバックアップすることもできます。制御する各リソースに対して DeletionPolicy
属性を指定します。DeletionPolicy
属性が設定されていない場合、AWS CloudFormation ではデフォルトでリソースが削除されます。
この機能は、スタックから削除されるリソースにつながるスタック更新オペレーションにも適用されます。たとえば、スタックテンプレートからリソースを削除し、テンプレートでスタックを更新するとします。この機能は、スタック更新オペレーション中に物理インスタンスが置き換えられるリソースには適用されません。例えば、リソースのプロパティを編集して、スタック更新中に CloudFormation がそのリソースを置き換えるようにするとします。
注記
例外: AWS::RDS::DBCluster
リソースと、DBClusterIdentifier
プロパティを指定しない AWS::RDS::DBInstance
リソースのデフォルトポリシーは Snapshot
です。
スタックが削除された際にリソースを保持するには、そのリソースに対して Retain
を指定します。Retain
はあらゆるリソースに使用できます。たとえば、ネストされたスタック、Amazon S3 バケットや EC2 インスタンスを保持して、スタックの削除後もそれらのリソースを使用したり変更したりできます。
注記
CloudFormation の外部のリソースを変更する場合は、Retain
削除ポリシーを使用してからスタックを削除します。そうしないと、リソースが CloudFormation テンプレートの同期の対象から外れてスタックエラーが発生する場合があります。
スナップショットをサポートするリソース (AWS::EC2::Volume
など) の場合は、Snapshot
を指定できます。これにより、CloudFormation は、スナップショットを作成したうえで、リソースを削除するようになります。
次のスニペットでは、Amazon S3 バケットリソースの削除ポリシーが Retain
に設定されています。このスタックを削除すると、CloudFormation は、バケットを削除することなく、そのまま維持します。
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MyBucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain" } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Resources: MyBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain
DeletionPolicy
オプション
Delete
-
CloudFormation は、スタックの削除時にリソースと (該当する場合) そのすべてのコンテンツを削除します。この削除ポリシーは、あらゆるリソースタイプに追加することができます。デフォルトでは、
DeletionPolicy
を指定しなかった場合、CloudFormation がリソースを削除します。ただし、以下の点を考慮する必要があります。-
AWS::RDS::DBCluster
リソースの場合、デフォルトポリシーはSnapshot
です。 -
AWS::RDS::DBInstance
プロパティを指定しないDBClusterIdentifier
リソースの場合、デフォルトポリシーはSnapshot
です。 -
Amazon S3 バケットでは、削除を成功させるためにはバケットのすべてのオブジェクトを削除する必要があります。
注記
CloudFormation のデフォルトの動作は、ForceDeleteWithoutRecovery フラグでシークレットを削除することです。
-
Retain
-
CloudFormation は、スタックを削除する際に、リソースやコンテンツを削除せず保持します。この削除ポリシーは、あらゆるリソースタイプに追加することができます。CloudFormation がスタックを削除すると、スタックの状態は
Delete_Complete
になりますが、保管されたリソースはその後も存在し続けます。それらのリソースを削除するまでは、対象料金が課金されます。更新オペレーションの場合は、次の考慮事項が適用されます。
-
リソースが削除された場合、
DeletionPolicy
が物理リソースを保持しますが、CloudFormation のスコープからは確実に削除します。 -
物理的な新しいリソースを作成して古いリソースと置き換えるようにリソースが更新された場合、古いリソースは、CloudFormation のスコープから削除されることも含め、完全に削除されます。
-
RetainExceptOnCreate
-
最初にリソースを作成したスタック操作を除き、
RetainExceptOnCreate
はスタック操作ではRetain
と同様に動作します。リソースを作成したスタック操作がロールバックされると、CloudFormation はリソースを削除します。他のすべてのスタック操作 (スタックの削除など) では、CloudFormation はリソースとその内容を保持します。その結果として、新しいリソース、空のリソース、未使用のリソースは削除される一方、使用中のリソースとそのデータは保持されます。テンプレートを更新せずにこの削除ポリシーを API パラメータとして使用するには、UpdateStack
API ドキュメントを参照してください。 Snapshot
-
スナップショットをサポートするリソースについては、CloudFormation は削除前に、リソースのスナップショットを作成します。CloudFormation がスタックを削除すると、スタックの状態は
Delete_Complete
になりますが、このポリシーによって作成されたスナップショットはその後も存在し続けます。それらのスナップショットを削除するまでは、対象料金が課金されます。スナップショットをサポートするリソースは以下のとおりです。