ENI の付け替えでプライベート IP を変えずにフェイルオーバーする方法
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - EC2・Systems Manager の操作権限を持つ IAM ユーザーまたはロールでコンソールにログイン済みであること
以下のリソースが作成済みであることを前提とします。3 台のインスタンスはすべて ap-northeast-1a にあり、Session Manager で接続できます。
まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。
| リソース種別 | リソース名 | 内容 | 作り方の参考 |
|---|---|---|---|
| VPC | eni-lab-vpc | CIDR 10.0.0.0/16 | Amazon VPC で仮想ネットワークを構築しサブネットを設定する |
| サブネット | eni-lab-app-1a | 10.0.1.0/24(ap-northeast-1a)。3 台のインスタンスを置く。インターネットゲートウェイへのルートあり | 同上 |
| サブネット | eni-lab-service-1a | 10.0.2.0/24(ap-northeast-1a)。付け替え用の ENI を置く | 同上 ※同じ AZ にもう 1 つ作る |
| セキュリティグループ | eni-lab-service-sg | インバウンドで HTTP(80)を 10.0.0.0/16 から許可 | セキュリティグループとネットワーク ACL でアクセスを制御する |
| EC2 インスタンス | eni-lab-primary / eni-lab-standby | Amazon Linux 2023。httpd が Hello from eni-lab-primary(standby は eni-lab-standby)を返す | Amazon EC2 でインスタンスを起動しSSH接続する ※接続は Session Manager |
| EC2 インスタンス | eni-lab-client | Amazon Linux 2023。curl で確かめる側 | 同上 |
このハンズオンで作成するリソースは以下のとおりです。
| リソース種別 | リソース名 | 内容 |
|---|---|---|
| ネットワークインターフェイス | eni-lab-service-eni | eni-lab-service-1a に作成。プライベート IPv4 アドレス 10.0.2.100、セキュリティグループ eni-lab-service-sg |
> [!WARNING] > EC2 インスタンスは起動している間ずっと課金されます。検証が終わったら必ず削除してください。
手順 1: ネットワークインターフェイスを作成する
AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。
上部の検索バーに EC2 と入力し、「EC2」を選択します。左側ナビゲーションの「ネットワーク & セキュリティ」→「ネットワークインターフェイス」を選択し、右上の「ネットワークインターフェイスの作成」をクリックします。以下を設定します。
- Description:
eni-lab-service-eni - サブネット:
eni-lab-service-1a(候補にはサブネット ID・AZ・名前が表示されます。選択後は ID で表示されます) - プライベート IPv4 アドレス:
カスタムを選び、「IPv4 アドレス」に10.0.2.100を入力 - セキュリティグループ: 一覧で
eni-lab-service-sgにチェックを入れる
「タグ」で「新規タグを追加」をクリックし、キー Name・値 eni-lab-service-eni を入力します。その他の項目はデフォルトのままにして、「ネットワークインターフェイスの作成」をクリックします。
一覧の検索欄に eni-lab-service-eni と入力して絞り込み、eni-lab-service-eni を選択します。下に表示される「詳細」タブでプライベート IPv4 アドレスが 10.0.2.100 であること、MAC アドレスとアベイラビリティーゾーン(ap-northeast-1a)を確認します。MAC アドレスは手順 4 で見比べるので控えておきます。
手順 2: プライマリ役のインスタンスにアタッチする
eni-lab-service-eni を選択したまま、「アクション」→「アタッチ」をクリックします。「VPC」で eni-lab-vpc を選択してから、「インスタンス」で eni-lab-primary を選択し、「アタッチ」をクリックします(「高度な ENA 設定」はデフォルトのままにします)。
ステータスが In-use になったことを確認します。インスタンスが実行中のままアタッチするホットアタッチなので、Amazon Linux 2023 が新しいインターフェイスを自動で認識して設定します。
左側ナビゲーションの「インスタンス」から eni-lab-client を選択し、「接続」をクリックします。「SSM セッションマネージャー」が選ばれていることを確認して「接続」をクリックします。開いたターミナルで次のコマンドを実行します。
curl -s http://10.0.2.100/
Hello from eni-lab-primary と表示され、プライマリ役のインスタンスが 10.0.2.100 で応答していることを確認します。
手順 3: プライマリ役を止めて ENI をスタンバイ役へ付け替える
障害に見立てて、プライマリ役を停止します。「インスタンス」で eni-lab-primary を選択し、「インスタンスの状態」→「インスタンスを停止」をクリックし、確認画面で「停止」をクリックします。
eni-lab-client のターミナルで次のコマンドを実行すると、5 秒待っても応答が返らず「応答なし」と表示されます。
curl -s --max-time 5 http://10.0.2.100/ || echo "応答なし"
「ネットワークインターフェイス」に戻り、eni-lab-service-eni を選択して「アクション」→「デタッチ」をクリックし、確認画面で「デタッチ」をクリックします。セカンダリ ENI は、インスタンスの停止中でもデタッチできます。
ステータスが Available に戻ったら、「アクション」→「アタッチ」をクリックし、「VPC」で eni-lab-vpc、「インスタンス」で eni-lab-standby を選択して「アタッチ」をクリックします。
手順 4: 同じ IP アドレスでスタンバイ役が応答することを確かめる
eni-lab-client のターミナルで、同じコマンドを実行します。
curl -s http://10.0.2.100/
Hello from eni-lab-standby と表示されます。クライアントの接続先は 10.0.2.100 のまま変えずに、応答するインスタンスがスタンバイ役に替わりました。
「ネットワークインターフェイス」で eni-lab-service-eni を選択し、「詳細」タブを確認します。「インスタンス ID」が eni-lab-standby のインスタンス ID に替わり(名前は表示されないので、インスタンスの一覧の ID と見比べます)、プライベート IPv4 アドレス(10.0.2.100)と MAC アドレスは手順 1 で控えた値から変わっていません。