

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

# `UpdateReplacePolicy` 属性
<a name="aws-attribute-updatereplacepolicy"></a>

当资源在堆栈更新操作期间被替换时，使用 `UpdateReplacePolicy` 属性保留或（在某些情况下）备份资源的现有物理实例。

启动堆栈更新时，CloudFormation 会根据您提交的内容与堆栈当前模板和参数之间的差异更新资源。如果您更新了一个资源属性，而该属性要求替换资源，则 CloudFormation 会在更新期间重新创建该资源。有关更多信息，请参阅《AWS CloudFormation 用户指南》**中的[堆栈资源的更新行为](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html)。

重建创建资源会生成一个新的物理 ID。CloudFormation 首先创建替换资源，然后更改来自其他依赖资源的引用，以指向替换资源。默认情况下，CloudFormation 接下来会删除旧资源。您可以使用 `UpdateReplacePolicy` 指定 CloudFormation 保留或（在某些情况下）创建旧资源的快照。

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

您可以将 `UpdateReplacePolicy` 属性应用于任何资源。只有当您更新一个资源属性，而其更新行为被指定为**替换**时，才执行 `UpdateReplacePolicy`，进而促使 CloudFormation 用具有新物理 ID 的新资源替换旧资源。例如，如果您更新 [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-rds-database-instance.html) 资源类型的 `Engine` 属性，则 CloudFormation 会创建新资源并将当前数据库实例资源替换为新资源。然后，`UpdateReplacePolicy` 属性会指示 CloudFormation 是已删除、保留还是创建了旧数据库实例的快照。资源的每个属性的更新行为会在 [AWS 资源和属性类型参考](aws-template-resource-type-ref.md)中有关该资源的参考主题中指定。

`UpdateReplacePolicy` 属性应用于您直接执行的[堆栈更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-direct.html)和使用[更改集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html)执行的堆栈更新。

**注意**  
保留的资源继续存在并继续产生相应费用，直到您删除它们为止。使用该策略创建的快照继续存在并继续产生相应费用，直到您删除它们为止。`UpdateReplacePolicy` 保留旧的物理资源或快照，但将其从 CloudFormation 的范围内删除。

`UpdateReplacePolicy`不同于 [`DeletionPolicy`](aws-attribute-deletionpolicy.md) 属性，它仅适用于堆栈更新过程中替换的资源。对于在删除堆栈时被删除的资源，或者从模板删除资源定义本身时被删除的资源（作为堆栈更新的一部分），使用 `DeletionPolicy`。

以下代码段包含具有 `Retain` 替换策略的 Amazon RDS 数据库实例资源。当该资源被具有新物理 ID 的新资源替换时，CloudFormation 保留旧的数据库实例而不删除它。

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

```
{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Resources" : {
    "myDB" : {
      "Type" : "AWS::RDS::DBInstance",
      "DeletionPolicy" : "Retain",
      "UpdateReplacePolicy" : "Retain",
      "Properties" : {}
    }
  }
}
```

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

```
AWSTemplateFormatVersion: 2010-09-09
Resources:
  myDB:
    Type: AWS::RDS::DBInstance
    DeletionPolicy: Retain
    UpdateReplacePolicy: Retain
    Properties: {}
```

## `UpdateReplacePolicy` 选项
<a name="aws-attribute-updatereplacepolicy-options"></a>

`Delete`  
在资源替换期间，CloudFormation 删除资源及其所有内容（如适用）。您可以向任何资源类型添加此策略。默认情况下，如果不指定 `UpdateReplacePolicy`，CloudFormation 将删除您的资源。但是，应注意下列事项：  
对于 Amazon S3 桶，您必须删除存储桶中的所有对象才能成功完成删除。

`Retain`  
当资源被替换时，CloudFormation 保留资源而不删除资源或其内容。您可以向任何资源类型添加此策略。保留的资源继续存在并继续产生相应费用，直到您删除它们为止。  
如果资源被替换，`UpdateReplacePolicy` 虽然保留旧的物理资源，但会从 CloudFormation 的范围中将其删除。

`Snapshot`  
对于支持快照的资源，CloudFormation 在删除资源之前为其创建快照。使用该策略创建的快照继续存在并继续产生相应费用，直到您删除它们为止。  
如果您在 `UpdateReplacePolicy` 中为不支持快照的资源指定 `Snapshot` 选项，CloudFormation 会还原为默认选项，即 `Delete`。
支持快照的资源包括：  
+ `[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)`