

# 为 API Gateway API 配置针对 DNS 故障转移的自定义运行状况检查
<a name="dns-failover"></a>

您可以使用 Amazon Route 53 运行状况检查，来控制从主要 AWS 区域的 API Gateway API 到辅助区域的 API Gateway API 的 DNS 故障转移。这可以帮助减轻在出现区域性问题时的影响。如果您使用自定义域，则无需客户端更改 API 终端节点，即可执行故障转移。

当您为别名记录选择[评估目标运行状况](https://docs.aws.amazon.com/Route53/latest/APIReference/API_AliasTarget.html#Route53-Type-AliasTarget-EvaluateTargetHealth>Evaluate Target Health)时，只有当 API Gateway 服务在该区域不可用时，这些记录才会失败。某些情况下，您自己的 API Gateway API 可能会在此之前遇到中断。要直接控制 DNS 故障转移，请为您的 API Gateway API 配置自定义 Route 53 运行状况检查。在本示例中，您使用 CloudWatch 警报来帮助操作员控制 DNS 故障转移。有关配置故障转移的更多示例和其他注意事项，请参阅[使用 Route 53 创建灾难恢复机制](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/)和[使用 AWS Lambda 和 CloudWatch 对 VPC 中的私有资源执行 Route 53 运行状况检查](https://aws.amazon.com/blogs/networking-and-content-delivery/performing-route-53-health-checks-on-private-resources-in-a-vpc-with-aws-lambda-and-amazon-cloudwatch/)。

**Topics**
+ [先决条件](#dns-failover-prereqs)
+ [步骤 1：设置资源](#dns-failover-intial-setup)
+ [步骤 2：启动到辅助区域的故障转移](#dns-failover-initiate)
+ [步骤 3：测试故障转移](#dns-failover-test)
+ [步骤 4：返回主区域](#dns-failover-return)
+ [后续步骤：自定义和定期测试](#dns-failover-next-steps)

## 先决条件
<a name="dns-failover-prereqs"></a>

要完成此过程，您必须创建和配置以下资源：
+ 您拥有的域名。
+ 该域名在两个 AWS 区域中的 ACM 证书。有关更多信息，请参阅[自定义域名的先决条件](how-to-custom-domains.md#how-to-custom-domains-prerequisites)。
+ 您的域名的 Route 53 托管区域。有关更多信息，请参阅《Amazon Route 53 开发人员指南》中的[使用托管区域](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-working-with.html)。

有关如何为域名创建 Route 53 失效转移 DNS 记录的更多信息，请参阅《Amazon Route 53 开发人员指南》中的[选择路由策略](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy.html)。有关如何监控 CloudWatch 警报的更多信息，请参阅《Amazon Route 53 开发人员指南》中的[监控 CloudWatch 警报](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/health-checks-creating-values.html#health-checks-creating-values-cloudwatch)。

## 步骤 1：设置资源
<a name="dns-failover-intial-setup"></a>

在此示例中，您将创建以下资源来为您的域名配置 DNS 故障转移：
+ 两个 AWS 区域中的 API Gateway API
+ 两个 AWS 区域中同名的 API Gateway 自定义域名
+ 将您的 API Gateway API 连接到自定义域名的 API Gateway API 映射
+ 域名的 Route 53 故障转移 DNS 记录
+ 辅助区域的 CloudWatch 警报
+ 在辅助区域进行的基于 CloudWatch 警报的 Route 53 运行状况检查

首先，确保您的主区域和辅助区域都拥有所有必需的资源。辅助区域应包含警报和运行状况检查。这样，您无需依赖主区域即可进行故障转移。有关创建这些资源的 CloudFormation 模板示例，请参阅[samples/primary.zip](samples/primary.zip)和[samples/secondary.zip](samples/secondary.zip)。

**重要**  
在故障转移到辅助区域之前，请确保所有必需的资源都可用。否则，您的 API 将无法为辅助区域的流量做好准备。

## 步骤 2：启动到辅助区域的故障转移
<a name="dns-failover-initiate"></a>

在以下示例中，备用区域收到 CloudWatch 指标并启动故障转移。我们使用需要操作员干预才能启动故障转移的自定义指标。

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 1 \
    --region us-west-1
```

将指标数据替换为您配置的 CloudWatch 警报的相应数据。

## 步骤 3：测试故障转移
<a name="dns-failover-test"></a>

调用您的 API 并验证您是否收到辅助区域的响应。如果您在步骤 1 中使用了示例模板，则故障转移后，响应将从 `{"message": "Hello from the primary Region!"}` 更改为 `{"message": "Hello from the secondary Region!"}`。

```
curl https://my-api.example.com

{"message": "Hello from the secondary Region!"}
```

## 步骤 4：返回主区域
<a name="dns-failover-return"></a>

要返回主区域，请发送使运行状况检查顺利通过的 CloudWatch 指标。

```
aws cloudwatch put-metric-data \
    --metric-name Failover \
    --namespace HealthCheck \
    --unit Count \
    --value 0 \
    --region us-west-1
```

将指标数据替换为您配置的 CloudWatch 警报的相应数据。

调用您的 API 并验证您是否收到主区域的响应。如果您在步骤 1 中使用了示例模板，则响应将从 `{"message": "Hello from the secondary Region!"}` 更改为 `{"message": "Hello from the primary Region!"}`。

```
curl https://my-api.example.com

{"message": "Hello from the primary Region!"}
```

## 后续步骤：自定义和定期测试
<a name="dns-failover-next-steps"></a>

此示例演示了一种配置 DNS 故障转移的方法。您可以使用各种 CloudWatch 指标或 HTTP 终端节点进行运行状况检查，以管理故障转移。定期测试您的故障转移机制，确保它们按预期运行，并且操作员熟悉您的故障转移过程。