各アベイラビリティーゾーンに単一の NAT Gateway をデプロイすることで、パブリック送信の障害ドメインを単一のアベイラビリティーゾーンに限定し、ゾーン間の連鎖的な障害を防ぎます。
ソリューション概要
単一のアベイラビリティーゾーンで障害が発生した場合の爆発半径を最小限に抑えるには、クラウドワークロードをゾーンごとに調整し、クロスゾーンコールを回避します。この高可用性アーキテクチャに基づき、各アベイラビリティーゾーンに単一 AZ の Internet NAT Gateway を個別にデプロイし、カスタムルートテーブルを使用して各ゾーンのパブリックトラフィックを個別にルーティングします。これにより、障害半径が単一のアベイラリティーゾーンに集約されます。
図に示すように、アベイラリティーゾーン A で障害が発生した場合、そのゾーンのワークロードのみが影響を受けます。アベイラリティーゾーン B とアベイラリティーゾーン C のワークロードは影響を受けません。
このディザスタリカバリモードは、Internet NAT Gateway をサポートするすべてのリージョンで利用できます。この機能を有効にするには、アカウントマネージャーにお問い合わせください。
操作手順
複数のアベイラビリティーゾーンへの単一アベイラビリティーゾーン Internet NAT Gateway のデプロイ
Internet NAT Gateway の購入ページに移動し、アベイラビリティーゾーンごとに 1 つの Internet NAT Gateway を作成します。
[課金方法]:従量課金。
[リージョン]:Internet NAT Gateway を作成するリージョンを選択します。
[ネットワーク & ゾーン]:Internet NAT Gateway の Virtual Private Cloud (VPC) と vSwitch を選択します。各 NAT Gateway を、異なるアベイラリティーゾーンの vSwitch 内に作成します。この設定は、作成後に変更することはできません。
[ディザスタリカバリタイプ]:シングルゾーンディザスタリカバリ を選択します。ゲートウェイは選択したアベイラリティーゾーン内にデプロイされ、デバイスレベルの冗長性を使用して高可用性を確保します。
[EIP]:既存の Elastic IP (EIP) があるかどうかに基づいてオプションを選択します。
EIP の選択:関連付けられていない EIP を選択します。
EIP の購入:利用可能な EIP がない場合にこのオプションを選択します。デフォルトでは、[BGP (Multi-ISP)] 回線タイプのトラフィック課金 EIP が作成されます。必要に応じて [最大帯域幅] を設定できます。
BGP (Multi-ISP) Premium 回線タイプの EIP、または異なる請求方法の EIP を関連付けるには、まず EIP を申請し、作成時に EIP の選択 を選択する必要があります。
後で設定:EIP を関連付けるまで、NAT Gateway はパブリックインターネットにアクセスできません。
ゲートウェイの作成後、対象の Internet NAT Gateway インスタンスの Elastic IP アドレス 列にある 今すぐ関連付ける をクリックします。その後、既存の EIP を選択するか、新しい EIP を作成して関連付けることができます。
各 NAT Gateway の SNAT エントリの設定
Internet NAT Gateway ページに移動します。対象インスタンスの 操作 列で SNAT の構成 をクリックし、次に SNAT エントリの作成 をクリックします。
[SNAT エントリの粒度]:SNAT ルールが適用されるスコープです。管理要件に基づいて粒度を選択します。
[Elastic IP Address の選択]:ドロップダウンリストから、パブリックインターネットへのアクセスに使用する EIP を選択します。
複数の EIP を選択できます。接続はハッシュアルゴリズムを使用して EIP 全体に分散されます。トラフィックは接続ごとに異なるため、EIP 間の負荷が不均一になる場合があります。単一の EIP が帯域幅制限に達することによるサービスの中断を防ぐため、すべての EIP を同じ共有帯域幅インスタンスに追加することを推奨します。
[EIP アフィニティ]:EIP アフィニティが無効になっている場合、単一のプライベート IP アドレスが、同じ宛先へのアクセスに異なる送信 IP アドレスを使用する可能性があります。有効にすると、同じ送信 IP アドレスが使用されます。ただし、単一の宛先への同時接続数が多くなると、ポートの割り当てに失敗する可能性があります。ポート割り当て失敗によるドロップを監視する必要があります。
エントリの作成後、対象エントリの 操作 列にある 編集 をクリックして、EIP と EIP アフィニティの設定を変更できます。
各アベイラビリティーゾーンの vSwitch に個別のカスタムルートテーブルをバインドして、ルートを設定します。各ルートテーブルで、同じゾーンの NAT Gateway を指す
0.0.0.0/0ルートを追加します。これにより、各ゾーンからのパブリックトラフィックが独立してルーティングされるようになります。VPC コンソール - ルートテーブルページに移動します。トップメニューバーで、Internet NAT Gateway があるリージョンを選択します。
ルートテーブルの作成:作成 をクリックし、対象の VPC を選択して、リソータイプ を vSwitch に設定します。
vSwitch のバインド:VPC コンソール - ルートテーブルページで、対象のルートテーブルを見つけ、リソースの関連付け 列の 関連付け をクリックします。表示されるダイアログボックスで 関連付け を選択し、対象の vSwitch を選択します。
カスタムルートの追加:ルートテーブルの詳細ページで、ルートエントリ > カスタムルート タブに移動し、ルートエントリの追加 をクリックします。ターゲット CIDR を
0.0.0.0/0に、ネクストホップの種類 を NAT Gateway に設定します。ネクストホップには、vSwitch と同じアベイラリティーゾーンにある NAT Gateway を選択します。
設定の確認
異なるアベイラビリティーゾーンの Elastic Compute Service (ECS) インスタンスにログインし、次のコマンドを実行して送信 IP アドレスを確認します。
# 送信 IP アドレスが、同じアベイラビリティーゾーンの NAT Gateway に関連付けられている EIP であることを確認します。
curl ifconfig.meアベイラリティーゾーン A の ECS インスタンスの送信 IP アドレスは NATGW-1 の EIP であり、アベイラリティーゾーン B のインスタンスでは NATGW-2 の EIP である必要があります。この違いにより、障害ドメインの分離が正しく機能していることが確認できます。
本番環境のベストプラクティス
ワークロードのアベイラビリティーゾーン冗長性:アプリケーションワークロードを複数のアベイラビリティーゾーンにデプロイすることで、1 つのゾーンで障害が発生しても、他のゾーンのワークロードは独立して動作し続けます。
複数 EIP の冗長性:各 NAT Gateway の SNAT エントリに複数の EIP を関連付けます。攻撃によって 1 つの EIP が利用できなくなった場合でも、トラフィックは他の EIP を経由して流れ続けることができます。
監視とアラート:各 NAT Gateway の同時接続数、入力/出力帯域幅、ポート割り当て失敗によるドロップなどの主要なメトリクスに対してアラートを設定します。これにより、リソースがボトルネックになる前にスケールアップできます。
専用 vSwitch:各 NAT Gateway に専用の vSwitch を作成し、プライベート IP アドレスの枯渇を防ぐために十分な IP アドレスを確保します。IP アドレスが枯渇すると、新しい EIP の関連付けがブロックされる可能性があります。