ENI の付け替えでプライベート IP を変えずにフェイルオーバーする方法

プライベート IP のままスタンバイへ切り替える ── ENI の付け替え
目次

概要

社内システムや監視サーバーのように、クライアントが プライベート IPv4 アドレスを直接指定して 接続している EC2 インスタンスは少なくありません。このインスタンスが故障したとき、スタンバイのインスタンスへ切り替えるには「同じ IP アドレスで、別のインスタンスが応答する」状態を作る必要があります。

EC2 のネットワーク接続の実体は、Elastic Network Interface(ENI、ネットワークインターフェイス) です。プライベート IP アドレスや MAC アドレス、セキュリティグループは、インスタンスではなく ENI が持っています。そのため、セカンダリ ENI をスタンバイのインスタンスに付け替えれば、IP アドレスごとトラフィックの行き先を移せます。

この記事では、ENI が持つ属性と付け替えの制約を整理し、Elastic IP アドレスや DHCP オプションセット、ロードバランサーとの違いを比べます。実践では、セカンダリ ENI をプライマリ役のインスタンスからスタンバイ役のインスタンスへ付け替え、同じプライベート IP アドレスのまま応答するホストが替わることを確かめます。

セカンダリ ENI をスタンバイへ付け替えて、同じプライベート IP のまま切り替える
セカンダリ ENI をスタンバイへ付け替えて、同じプライベート IP のまま切り替える
クラウドおさる

猿山の見張り台の番号札は、見張り役の猿ではなく台そのものに付いているのでござる。今日は、その番号札(ENI)を倒れた見張りから控えの見張りへ掛け替えて、呼び出し番号を変えずに交代するところを確かめるでござるよ。

この記事のメリット

  • ENI が持つ属性(プライベート IP アドレス・MAC アドレス・セキュリティグループなど)と、付け替えたときに何が引き継がれるかが分かる
  • プライマリ ENI とセカンダリ ENI の違い、付け替えの制約(同じ AZ)を説明できるようになる
  • プライベート IP のままのフェイルオーバーに、Elastic IP アドレス・DHCP オプションセット・ロードバランサーが向かない理由が分かる
  • コンソールで ENI を作成・アタッチ・デタッチし、スタンバイへ切り替える手順を体験できる

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

ENI はネットワーク接続の実体

ENI は、VPC 内の仮想ネットワークカードを表すリソースです。インスタンスがネットワークにつながるときに使うアドレスや設定は、ENI の属性として保持されます。

ENI が持つ属性内容
プライマリプライベート IPv4 アドレスサブネットの IPv4 アドレス範囲から割り当てる
セカンダリプライベート IPv4 アドレス同じサブネットの範囲から追加できる
Elastic IP アドレスプライベート IPv4 アドレスごとに 1 つ関連付けられる
セキュリティグループENI 単位で付ける
MAC アドレスENI ごとに固定
送信元/送信先チェックENI ごとのフラグ

ENI をインスタンスからデタッチして別のインスタンスにアタッチしても、これらの属性はそのまま保持され、ネットワークトラフィックは新しいインスタンスへ向かいます。

プライマリ ENI とセカンダリ ENI

すべてのインスタンスには、起動時に作られる プライマリ ENI(eth0)があります。これに加えて、セカンダリ ENI を追加でアタッチできます。

項目プライマリ ENIセカンダリ ENI
作られるタイミングインスタンスの起動時自分で作成してアタッチする
デタッチできない実行中・停止中のどちらでもできる
別のインスタンスへの付け替えできないできる
アタッチできる先―同じ AZ のインスタンス

アタッチは、インスタンスの実行中(ホットアタッチ)、停止中(ウォームアタッチ)、起動時(コールドアタッチ)のいずれでもできます。ENI とインスタンスは同じ AZ にある必要があり、別の AZ のインスタンスには付け替えられません。

外せるのはセカンダリ ENI だけ。付け替え先は同じ AZ のインスタンスに限られる
外せるのはセカンダリ ENI だけ。付け替え先は同じ AZ のインスタンスに限られる
クラウドおさる

付け替えられるのはセカンダリ ENI だけで、プライマリ ENI はインスタンスから外せないのでござる。そして付け替え先は同じ AZ のインスタンスに限られるでござるぞ。隣の山の見張り台に札は掛けられぬのでござるな。

OS 側の設定

ENI をアタッチしたあと、インスタンスの OS がそのインターフェイスを認識して IP アドレスやルートを設定する必要があります。Amazon Linux と Windows Server は、ホットアタッチ・ウォームアタッチを自動で認識して設定します。それ以外の OS では、2 つ目のインターフェイスの起動、プライベート IPv4 アドレスの設定、ルートテーブルの変更を手動で行う場合があります。

なお、同じサブネットの ENI を 1 台のインスタンスに複数アタッチすると、非対称ルーティングなどの問題が起きることがあります。この記事では、付け替え用の ENI を、インスタンスのプライマリ ENI とは別のサブネット(同じ AZ)に置きます。

ほかの手段との違い

「障害時に、同じプライベート IP アドレスのまま別のインスタンスへ切り替える」という要件に対して、よく比べられる手段は次のとおりです。

手段できることこの要件に合うか
セカンダリ ENI の付け替えプライベート IP アドレス・MAC アドレス・セキュリティグループごと別のインスタンスへ移す合う。ルートテーブルや DNS を変えずにトラフィックが移る
セカンダリプライベート IPv4 アドレスの付け替えENI に追加したセカンダリプライベート IPv4 アドレスだけを、別のインスタンスへ割り当て直す合う。ただし移るのはアドレスだけで、MAC アドレスやセキュリティグループは移らない
Elastic IP アドレスの付け替えパブリック IPv4 アドレスを別のインスタンスへ移す合わない。プライベート IP アドレスでの接続は切り替わらない
DHCP オプションセットVPC 内のインスタンスに配る DNS サーバー・ドメイン名・NTP サーバーなどを指定する合わない。特定のインスタンスに IP アドレスを割り当てる機能ではない
ロードバランサーの登録替えターゲットを入れ替えて、ロードバランサーの宛先を切り替える合わない。クライアントの接続先がロードバランサーのアドレスに変わる

DHCP オプションセットで何を設定できるかは、DHCPオプションセットによるVPC内カスタムDNS設定で扱っています。

スタンバイへ移せるのは、ENI そのものか、セカンダリプライベート IPv4 アドレスです(両方を移すこともできます)。この記事では、MAC アドレスやセキュリティグループまでまとめて引き継げる ENI の付け替えを扱います。

ENI の付け替えは、障害が起きてから付け替えが終わるまで一時的に接続が切れますが、ルートテーブルや DNS サーバーへの変更は要りません。実際の運用では、この付け替えを監視の仕組みやスクリプトで自動化します。

クラウドおさる

外から見える番号(Elastic IP アドレス)を掛け替えても、内側の呼び出し番号(プライベート IP アドレス)は変わらないでござる。「プライベート IP のまま」と言われたら、番号札を持っている ENI か、そのセカンダリの番号を動かすのでござる。MAC アドレスやセキュリティグループまで丸ごと引き継ぐなら、ENI ごとでござるな。

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

ハンズオンガイド5 ステップ画面 7 枚

コンソールの横に開いて、チェックしながら進めましょう。

ガイドを開く

別タブで開きます。チェックはこのブラウザに保存されます。

プライベート IP アドレス 10.0.2.100 を持つセカンダリ ENI を作り、プライマリ役のインスタンスに付けます。プライマリ役を止めて障害に見立て、ENI をスタンバイ役のインスタンスへ付け替えます。クライアント役のインスタンスから同じ IP アドレスにアクセスし、応答するホストが替わることを確かめます。

前提条件

  • リージョン: ap-northeast-1(東京)
  • EC2・Systems Manager の操作権限を持つ IAM ユーザーまたはロールでコンソールにログイン済みであること

以下のリソースが作成済みであることを前提とします。3 台のインスタンスはすべて ap-northeast-1a にあり、Session Manager で接続できます。

まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。

リソース種別リソース名内容作り方の参考
VPCeni-lab-vpcCIDR 10.0.0.0/16Amazon VPC で仮想ネットワークを構築しサブネットを設定する
サブネットeni-lab-app-1a10.0.1.0/24(ap-northeast-1a)。3 台のインスタンスを置く。インターネットゲートウェイへのルートあり同上
サブネットeni-lab-service-1a10.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-standbyAmazon Linux 2023。httpd が Hello from eni-lab-primary(standby は eni-lab-standby)を返すAmazon EC2 でインスタンスを起動しSSH接続する ※接続は Session Manager
EC2 インスタンスeni-lab-clientAmazon Linux 2023。curl で確かめる側同上

このハンズオンで作成するリソースは以下のとおりです。

リソース種別リソース名内容
ネットワークインターフェイスeni-lab-service-enieni-lab-service-1a に作成。プライベート IPv4 アドレス 10.0.2.100、セキュリティグループ eni-lab-service-sg

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 にチェックを入れる
ネットワークインターフェイスの作成画面(サブネット・カスタムの IPv4 アドレス・セキュリティグループを入力した状態)
ネットワークインターフェイスの作成画面(サブネット・カスタムの IPv4 アドレス・セキュリティグループを入力した状態)

「タグ」で「新規タグを追加」をクリックし、キー Name・値 eni-lab-service-eni を入力します。その他の項目はデフォルトのままにして、「ネットワークインターフェイスの作成」をクリックします。

一覧の検索欄に eni-lab-service-eni と入力して絞り込み、eni-lab-service-eni を選択します。下に表示される「詳細」タブでプライベート IPv4 アドレスが 10.0.2.100 であること、MAC アドレスとアベイラビリティーゾーン(ap-northeast-1a)を確認します。MAC アドレスは手順 4 で見比べるので控えておきます。

作成したネットワークインターフェイスの詳細(プライベート IPv4 アドレス・MAC アドレス・AZ)
作成したネットワークインターフェイスの詳細(プライベート IPv4 アドレス・MAC アドレス・AZ)

手順 2: プライマリ役のインスタンスにアタッチする

eni-lab-service-eni を選択したまま、「アクション」→「アタッチ」をクリックします。「VPC」で eni-lab-vpc を選択してから、「インスタンス」で eni-lab-primary を選択し、「アタッチ」をクリックします(「高度な ENA 設定」はデフォルトのままにします)。

ネットワークインターフェイスのアタッチ画面(eni-lab-primary を選択した状態)
ネットワークインターフェイスのアタッチ画面(eni-lab-primary を選択した状態)

ステータスが 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 で応答していることを確認します。

eni-lab-client から 10.0.2.100 にアクセスし、eni-lab-primary が応答した結果
eni-lab-client から 10.0.2.100 にアクセスし、eni-lab-primary が応答した結果

手順 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 を選択して「アタッチ」をクリックします。

ネットワークインターフェイスのアタッチ画面(eni-lab-standby を選択した状態)
ネットワークインターフェイスのアタッチ画面(eni-lab-standby を選択した状態)

手順 4: 同じ IP アドレスでスタンバイ役が応答することを確かめる

eni-lab-client のターミナルで、同じコマンドを実行します。

curl -s http://10.0.2.100/

Hello from eni-lab-standby と表示されます。クライアントの接続先は 10.0.2.100 のまま変えずに、応答するインスタンスがスタンバイ役に替わりました。

同じ 10.0.2.100 に対して eni-lab-standby が応答した結果
同じ 10.0.2.100 に対して eni-lab-standby が応答した結果

「ネットワークインターフェイス」で eni-lab-service-eni を選択し、「詳細」タブを確認します。「インスタンス ID」が eni-lab-standby のインスタンス ID に替わり(名前は表示されないので、インスタンスの一覧の ID と見比べます)、プライベート IPv4 アドレス(10.0.2.100)と MAC アドレスは手順 1 で控えた値から変わっていません。

付け替え後のネットワークインターフェイスの詳細(インスタンス ID が eni-lab-standby のものに替わり、IP アドレスと MAC アドレスは同じ)
付け替え後のネットワークインターフェイスの詳細(インスタンス ID が eni-lab-standby のものに替わり、IP アドレスと MAC アドレスは同じ)
クラウドおさる

「プライベート IP のまま」「すぐ切り替える」と言われたら ENI(またはセカンダリプライベート IP)の付け替え、「パブリック IP を移す」なら Elastic IP でござる。DHCP オプションセットは IP を配る仕組みではないので、名前に惑わされぬよう気をつけるでござるな。

まとめ

要件選ぶもの
プライベート IP アドレスのまま、スタンバイのインスタンスへ切り替えるセカンダリ ENI の付け替え(アドレスだけならセカンダリプライベート IPv4 アドレスの付け替えでもよい)
パブリック IPv4 アドレスを別のインスタンスへ移すElastic IP アドレスの付け替え
VPC 内のインスタンスに配る DNS サーバーやドメイン名を変えるDHCP オプションセット
複数のインスタンスにリクエストを振り分けるロードバランサー
  • プライベート IP アドレス・MAC アドレス・セキュリティグループは ENI の属性で、付け替えても保持される
  • プライマリ ENI はデタッチできない。付け替えられるのはセカンダリ ENI だけ
  • ENI は同じ AZ のインスタンスにしかアタッチできない
  • アタッチは実行中(ホット)・停止中(ウォーム)・起動時(コールド)のいずれでもできる。Amazon Linux と Windows Server はホット・ウォームアタッチを自動で認識して設定する
  • 付け替えのあいだは一時的に接続が切れるが、ルートテーブルや DNS の変更は要らない

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方も募集しています。異業種や文系からインフラエンジニアになり活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます
プライベート IP のままスタンバイへ切り替える ── ENI の付け替え

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次