

这是新的《CloudFormation 模板参考指南》**。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助，请参阅《AWS CloudFormation 用户指南》[https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

# `DeletionPolicy` 属性
<a name="aws-attribute-deletionpolicy"></a>

利用 `DeletionPolicy` 属性，您可以在某个资源的堆栈被删除时保留并（在某些情况下）备份该资源。您可为要控制的每个资源指定 `DeletionPolicy` 属性。默认情况下，如果某个资源不具有 `DeletionPolicy` 属性，CloudFormation 将删除该资源。

此功能也适用于会导致从堆栈中删除资源的堆栈更新操作。例如，如果您从堆栈模板中删除资源，则将使用模板更新堆栈。此功能不适用于其物理实例在堆栈更新操作中被替换的资源。例如，如果您编辑资源的属性，CloudFormation 将在堆栈更新过程中替换该资源。

**注意**  
**例外**：对于 `AWS::RDS::DBCluster` 资源以及没有指定 `DBClusterIdentifier` 属性的 `AWS::RDS::DBInstance` 资源，默认策略是 `Snapshot`。

要在某个资源的堆栈被删除时保留该资源，请为其指定 `Retain`。您可以对任何资源使用 `Retain`。例如，您可以保留嵌套堆栈、Amazon S3 桶或 EC2 实例，以便在删除这些资源的堆栈后继续使用或修改这些资源。

**注意**  
如果要修改 CloudFormation 外部的资源，请使用 `Retain` 删除策略，然后删除堆栈。否则，您的资源可能与 CloudFormation 模板不同步并导致堆栈错误。

对于支持快照的资源（例如 `AWS::EC2::Volume`），您可以指定 `Snapshot` 以让 CloudFormation 在删除资源之前创建快照。

以下代码段包含具有 `Retain` 删除策略的 Amazon S3 桶资源。此堆栈被删除时，CloudFormation 将保留该存储桶，不将其删除。

## JSON
<a name="aws-attribute-deletionpolicy-example.json"></a>

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Resources" : {
    "MyBucket" : {
      "Type" : "AWS::S3::Bucket",
      "DeletionPolicy" : "Retain"
    }
  }
}
```

## YAML
<a name="aws-attribute-deletionpolicy-example.yaml"></a>

```
AWSTemplateFormatVersion: '2010-09-09'
Resources:
  MyBucket:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain
```

## `DeletionPolicy` 选项
<a name="aws-attribute-deletionpolicy-options"></a>

`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 会保留资源及其内容。结果是新的、空的和未使用的资源被删除，而正在使用的资源及其数据会被保留。请参阅 [UpdateStack](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html) API 文档，在不更新模板的情况下使用此删除政策作为 API 参数。

`Snapshot`  
对于支持快照的资源，CloudFormation 在删除资源之前为其创建快照。CloudFormation 完成堆栈删除后，堆栈将处于 `Delete_Complete` 状态，但采用此策略创建的快照将继续存在，并且仍将产生相应费用，直到您删除这些快照。  
支持快照的资源包括：  
+ [AWS::DocDB::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-docdb-dbcluster.html)
+ [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html)
+ [AWS::ElastiCache::CacheCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-cachecluster.html)
+ [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html)
+ [AWS::Neptune::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-neptune-dbcluster.html)
+ [AWS::RDS::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbcluster.html)
+ [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html)
+ [AWS::Redshift::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-redshift-cluster.html)