EC2再作成時にプライベートIPアドレスとMACアドレスを引き継いでみる

Elastic Network Interfaceの再利用で、プライベートIPアドレスとMACアドレスを引き継ぐ設定をしました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。

何らかの理由でEC2インスタンスのリストアをする際など、EC2インスタンスを削除して再作成する際にネットワークインターフェイスの項目で指定すれば削除前と同じプライベートIPアドレスを利用することは可能です。ただし、マネジメントコンソールでこの方法を実施するとMACアドレスに関しては再作成時に自動で割り当てられる為、MACアドレスをソフトウェアのライセンス認証に利用している場合など問題が発生してしまいます。

今回はそんな時に以前と同じプライベートIPアドレスとMACアドレスを利用する方法をご紹介したいと思います。

やり方

こちらのドキュメントに記載の通り、ENI(Elastic Network Interface)にはプライベートIPアドレス、MACアドレスを含む以下の属性情報を含めることが可能です。その為、ENIを削除することなく新しいEC2インスタンスに使うことでEC2リストアの際にもMACアドレスを引き継ぐことが可能です。

  • VPC の IPv4 アドレス範囲からのプライマリプライベート IPv4 アドレス
  • VPC の IPv4 アドレス範囲からの 1 つ以上のセカンダリプライベート IPv4 アドレス
  • プライベート IPv4 アドレスごとに 1 つの Elastic IP アドレス (IPv4)
  • 1 つのパブリック IPv4 アドレス
  • 1 つ以上の IPv6 アドレス
  • 1 つ以上のセキュリティグループ
  • MAC アドレス
  • 送信元/送信先チェックフラグ
  • 説明

やってみる

それではやってみます。

EC2インスタンスの削除前作業

削除してリストアする対象のEC2インスタンスは起動済みの前提で始めます。今回はAmazonLinux2で起動します。

最初に、削除前のEC2インスタンスにログインして、プライベートIPアドレス、MACアドレスを確認します。比較のためインスタンスIDも確認しておきます。

$ ip address
〜〜〜〜省略〜〜〜〜
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0a:4a:86:07:40:6c brd ff:ff:ff:ff:ff:ff
inet 10.0.2.82/24 brd 10.0.2.255 scope global dynamic eth0
〜〜〜〜省略〜〜〜〜
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-0e423c31ca07a2f19

EC2インスタンスの説明の項目からネットワークインターフェイスの項目でENIのリソース識別子(eni-xxxxxxxx)を確認します。

次に、ネットワークインターフェイスの画面でする対象のENIを選択し、アクションから「削除時の動作を変更」をクリック。

削除時の動作「合わせて削除」のチェックを外して、保存をクリック。以上で、ENIを削除せず残す設定は完了です。

あとは、インスタンス画面からEC2インスタンスを削除します。

EC2インスタンス削除後もENIはステータス「available」で残っています。

削除するEC2インスタンス側の作業

続きまして、削除せずに残しておいたENIをリストアするEC2インスタンスに再利用します。

事前に取得しておいたAMIなどからインスタンス起動ウィザードを利用してEC2インスタンスを起動します。

この際に、ネットワークインターフェイスの項目でプルダウンメニューから先ほどのENIを指定します。 この時気をつける点としては、削除したEC2インスタンスと同じサブネットを選択しないとプルダウンメニューにENIが表示されないことと、セキュリティグループに関してもENIに紐づいている為、インスタンス起動ウィザードで選択したセキュリティグループが反映されない点です。

あとは通常通りの手順でEC2インスタンスを起動し、立ち上がるのを待ちます。

起動後、EC2インスタンスにログインしてプライベートIPアドレスとMACアドレスを確認します。

$ ip address
〜〜〜〜省略〜〜〜〜
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
link/ether 0a:4a:86:07:40:6c brd ff:ff:ff:ff:ff:ff
inet 10.0.2.82/24 brd 10.0.2.255 scope global dynamic eth0
〜〜〜〜省略〜〜〜〜
$ curl http://169.254.169.254/latest/meta-data/instance-id
i-05dde0cbbcb9779b0

インスタンスIDは更新されてますがプライベートIPアドレスとMACアドレスはちゃんと引き継げてます!

終わりに

これでプライベートIPアドレスだけでなくMACアドレスも固定することができますね!ただ、不要になったENIを削除し忘れてしまうと料金が発生してしまいますのでご注意ください。この記事がどなたかのお役に立てば幸いです。