各アベイラビリティーゾーンに 1 つの NAT Gateway をデプロイすると、パブリックエグレスの障害ドメインを単一アベイラビリティーゾーンに限定でき、ゾーン間のカスケード障害を防止できます。
ソリューションの概要
単一アベイラビリティーゾーンの障害による影響を最小化するには、クラウドワークロードをゾーン単位で配置し、ゾーン間の依存関係を避けます。この高可用性アーキテクチャでは、各ゾーンに 1 つの NAT Gateway をデプロイします。
図に示すとおり、アベイラビリティーゾーン A で障害が発生した場合、そのゾーン内のワークロードのみが影響を受けます。アベイラビリティーゾーン B とアベイラビリティーゾーン C のワークロードは影響を受けません。
この災害対策モードは、Internet NAT Gateway をサポートするすべてのリージョンで利用できます。この機能を有効にするには、アカウントマネージャーにお問い合わせください。
操作手順
複数のアベイラビリティーゾーンに、単一アベイラビリティーゾーンの Internet NAT Gateway をデプロイします。
Internet NAT Gateway の購入ページ に移動し、アベイラビリティーゾーンごとに 1 つの Internet NAT Gateway を作成します。
[課金方法]:従量課金。
[リージョン]:Internet NAT Gateway を作成するリージョンを選択します。
[ネットワーク & ゾーン]:Internet NAT Gateway の 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 アドレス] 列で [今すぐ関連付ける] をクリックします。既存の Elastic IP アドレスを選択するか、新規に作成して関連付けできます。
各 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 アドレスを確認します。
# 同一アベイラビリティーゾーン内の NAT Gateway にバインドされている EIP が、エグレス IP アドレスであることを確認します。
curl ifconfig.meアベイラビリティーゾーン A の ECS インスタンスのエグレス IP アドレスは NATGW-1 の EIP になります。一方、アベイラビリティーゾーン B のインスタンスのエグレス IP は NATGW-2 の EIP になります。この違いにより、障害ドメインの分離が正しく機能していることを確認できます。
本番環境のベストプラクティス
ワークロードのアベイラビリティーゾーン冗長化:アプリケーションワークロードを複数のアベイラビリティーゾーンにデプロイします。これにより、1 つのゾーンで障害が発生しても、他のゾーンのワークロードは独立して動作し続けます。
複数 EIP の冗長化:各 NAT Gateway の SNAT エントリに複数の EIP を関連付けます。攻撃により 1 つの EIP が利用できなくなっても、他の EIP を介してトラフィックを継続できます。
監視とアラート:各 NAT Gateway の主要メトリクス (同時接続数、インバウンド/アウトバウンド帯域幅、ポート割り当て失敗ドロップ など) に対してアラートを設定します。これにより、ボトルネックになる前にリソースをスケールアップできます。
専用 vSwitch:各 NAT Gateway 用に専用の vSwitch を作成し、十分なプライベート IP アドレスを予約します。これにより、IP アドレスの枯渇によって新しい EIP を関連付けできなくなる事態を防げます。