

# 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 ヘルスチェックを設定します。この例では、オペレーターが DNS フェイルオーバーを制御するのに役立つ CloudWatch アラームを使用します。フェイルオーバーを設定する際のその他の例や考慮事項については、「[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>

この手順を完了するには、次のリソースを作成して設定する必要があります。
+ 所有するドメイン名。
+ 2 つの 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 フェイルオーバーを設定します。
+ 2 つの AWS リージョンにある API Gateway API
+ 2 つの 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 フェイルオーバーを設定する 1 つの方法を示しています。フェイルオーバーを管理するヘルスチェックには、さまざまな CloudWatch メトリクスまたは HTTP エンドポイントを使用できます。フェイルオーバーメカニズムを定期的にテストして、期待どおりに機能すること、およびオペレーターがフェイルオーバー手順に精通していることを確認します。