

# 使用回滚触发器在突破警报阈值时回滚 CloudFormation 堆栈
<a name="using-cfn-rollback-triggers"></a>

利用回滚触发器，您可让 Amazon CloudFormation 在堆栈创建和更新期间监控应用程序的状态，并可在应用程序超出您指定的警报阈值时回滚操作。对于您创建的每个回滚触发器，您需要指定 CloudFormation 应监控的 CloudWatch 警报。CloudFormation 会在堆栈创建或更新操作期间以及所有资源部署完毕之后的指定时间段内，一直监控指定的警报。在堆栈操作或监控期间，如果有任何警报进入 `ALARM` 状态，CloudFormation 就会回滚整个堆栈操作。

您可以将监控时间设置为 0 (默认值) 到 180 分钟之间。在堆栈创建或更新操作部署了所有必需的资源之后，CloudFormation 仍会在这段时间内监控所有的回滚触发器。在堆栈操作或监控期间，如果有任何警报进入 `ALARM` 状态，CloudFormation 就会回滚整个堆栈操作。对于更新操作，如果监控期间结束而没有任何警报进入 `ALARM` 状态，CloudFormation 将继续照常处置旧资源。如果您设置了监控时间，但没有指定任何回滚触发器，CloudFormation 仍然会等待指定的时长，然后清理掉更新操作的旧资源。您可以使用此监控期间来执行任何所需的手动堆栈验证，然后根据需要手动取消堆栈创建或更新操作。如果您将监控时间设置为 0 分钟，CloudFormation 仍会在堆栈创建和更新操作期间监控回滚触发器，并在有警报进入 `ALARM` 状态时回滚操作。对于没有发生警报的更新操作，系统会在该操作完成时立即开始处置旧资源。

默认情况下，CloudFormation 仅在警报进入 `ALARM` 状态（而不是 `INSUFFICIENT_DATA` 状态）时才回滚堆栈操作。如果还要让 CloudFormation 在有警报进 `INSUFFICIENT_DATA` 状态时回滚堆栈操作，请编辑 CloudWatch 警报以便将缺少数据视为 `breaching`。有关更多信息，请参阅 *Amazon CloudWatch 用户指南*中的[配置 CloudWatch 警报处理缺少数据的方式](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-missing-data)。

在更新操作期间回滚堆栈时，CloudFormation 不会监控回滚触发器。

您可以添加最多 5 个回滚触发器。要添加回滚触发器，请指定 CloudWatch 警报的 Amazon 资源名称（ARN）。目前，`AWS::CloudWatch::Alarm` 和 `AWS::CloudWatch::CompositeAlarm` 类型可以用作回滚触发器。有关 CloudWatch 警报的更多信息，请参阅《Amazon CloudWatch 用户指南》中的[使用 Amazon CloudWatch 警报](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)**。

如果给定的 CloudWatch 警报缺失，则整个堆栈操作都会失败并且回滚。

请注意，访问 CloudWatch 需要凭证。这些凭证必须有权访问 Amazon 资源，例如检索有关您的资源的 CloudWatch 指标数据。有关更多信息，请参阅《Amazon CloudWatch 用户指南》中的 [Amazon CloudWatch 的身份验证和访问控制](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/auth-and-access-control-cw.html)**。

## 在堆栈创建或更新期间添加回滚触发器
<a name="using-cfn-rollback-triggers-create"></a>

**在堆栈创建或更新期间添加回滚触发器（控制台）**

1. 创建或更新堆栈时，在**配置堆栈选项**页面的**高级选项**下，展开**回滚配置**部分。

1. 输入一个介于 `0` 到 `180` 分钟之间的监控时间。默认值为 `0`。

1. 指定要用作回滚触发器的 CloudWatch 警报或复合警报的 ARN，然后选择**添加 CloudWatch 警报 ARN**。

   例如，以下是 CloudWatch 警报或复合警报的 ARN，`arn:aws:cloudwatch:us-east-1:123456789012:alarm:MyAlarmName`。

1. 选择**下一步**并查看堆栈的详细信息。

1. 做好准备后，选择**提交**以创建或更新堆栈。

**在堆栈创建或更新期间添加回滚触发器（Amazon CLI）**  
使用带 `--rollback-configuration` 选项的 [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/create-stack.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/create-stack.html) 命令或 [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/update-stack.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/update-stack.html) 命令。

例如，以下 **update-stack** 命令会将 *MyCompositeAlarm* 设置为监视周期为 5 分钟的回滚触发器：

```
aws cloudformation update-stack --stack-name MyStack \
  --use-previous-template \
  --rollback-configuration \
  "RollbackTriggers=[{Arn=arn:aws:cloudwatch:us-east-1:123456789012:alarm:MyCompositeAlarm,Type=AWS::CloudWatch::CompositeAlarm}],MonitoringTimeInMinutes=5"
```

## 将回滚触发器添加到更改集
<a name="using-cfn-rollback-triggers-change-set"></a>

将回滚触发器添加到更改集（控制台）

1. 创建更改集期间，在**配置堆栈选项**页面的**高级选项**下，展开**回滚配置**部分。

1. 输入一个介于 `0` 到 `180` 分钟之间的监控时间。默认值为 `5`。

1. 指定要用作回滚触发器的 CloudWatch 警报或复合警报的 ARN，然后选择**添加 CloudWatch 警报 ARN**。

   例如，以下是 CloudWatch 警报或复合警报的 ARN，`arn:aws:cloudwatch:us-east-1:123456789012:alarm:MyAlarmName`。

1. 选择**下一步**并查看更改集的详细信息。

1. 做好准备后，选择**创建更改集**以创建更改集。

**将回滚触发器添加到更改集（Amazon CLI）**  
使用带 `--rollback-configuration` 选项的 [https://docs.amazonaws.cn/cli/latest/reference/cloudformation/create-change-set.html](https://docs.amazonaws.cn/cli/latest/reference/cloudformation/create-change-set.html) 命令。

## 查看堆栈的回滚触发器
<a name="using-cfn-rollback-triggers-view"></a>

要查看堆栈的回滚触发器，请查看 **Rollback configuration**（回滚配置）部分。

1. 在**堆栈**页面上，从左侧列表中选择要查看的堆栈。

1. 在**堆栈信息**选项卡上，展开**回滚配置**部分，查看回滚触发器。

## 查看更改集的回滚触发器
<a name="using-cfn-rollback-triggers-view-change-set"></a>

要查看更改集的回滚触发器，请查看 **Rollback configuration**（回滚配置）部分。

1. 在**堆栈**页面上，从左侧列表中选择要查看的堆栈。

1. 选择**更改集**选项卡，然后选择要查看的更改集。

1. 选择**输入**选项卡，然后查看**回滚配置**部分。