障害対応：ネットワークインターフェースを引き継いでEC2インスタンスをAMIから復元する手順

## はじめに
AWSのEC2インスタンスを管理する上で、特定の時点のインスタンス状態を保存したり、復元したりすることが求められる場合があります。

例えば、AMI (Amazon Machine Image)を利用してEC2インスタンスのバックアップを取得し、後からその状態に戻すケースです。

:::note warn
**本記事では、EC2インスタンスのAMIを取得し、取得後にインスタンスを削除した上で、ネットワークインターフェースを残したまま復元する手順について説明します。**
:::

今回は、ネットワークインターフェースのアタッチを維持する方法に焦点を当てて解説します。

## 知識整理
### EC2とは
Amazon EC2 (Elastic Compute Cloud)は、AWSが提供する仮想サーバーサービスで、インターネットを介してスケーラブルなコンピューティングリソースを提供します。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/concepts.html

EC2を使用すると、ユーザーはインスタンス（仮想マシン）を自由に立ち上げ、アプリケーションやサービスのホスティングが可能です。

### AMIとは
AMI（Amazon Machine Image）は、EC2インスタンスのOS、アプリケーション、設定を含むテンプレートです。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html

AMIを使用することで、特定の時点のインスタンスを複製したり、同一の設定で新たなインスタンスを迅速に作成することができます。

### ネットワークインターフェース
ネットワークインターフェースは、EC2インスタンスにアタッチして通信を行うためのネットワークアダプタです。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-eni.html

IPアドレスやセキュリティグループなどのネットワーク設定を持ち、削除後に復元する際に元のネットワーク構成を再利用することが可能です。

## ユースケース
以下のような場面で、AMI取得後のEC2インスタンス削除およびネットワークインターフェースの再利用が役立ちます。

:::note 
- **特定の時点のバックアップを保持したい場合**
重要なアプリケーションの設定やデータを含むインスタンスを、AMIとして保存し、後で必要に応じて復元する際に利用します。

- **コスト削減のため一時的にインスタンスを停止・削除する場合**
インスタンスを一時的に削除しても、元のネットワーク設定で再度起動できるようにすることで、復元がスムーズに行えます。

- **テスト環境のスナップショットを作成し、再利用する場合**
開発やテスト環境で特定の設定を残したまま環境を再構築したい場合に便利です。
:::

## 実際にやってみた
以下の手順で、EC2インスタンスのAMIを取得し、インスタンスを削除してから復元します。

:::note warn
事前にネットワークインターフェースを残しておくことで、復元時にアタッチ可能な状態にします。
:::

### 1. AMIの取得

まず、AWSマネジメントコンソールにログインし、EC2サービスを選択します。

対象インスタンスを選び、メニューの「アクション」から「イメージを作成」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/529203ac-5f7a-89ca-9fe2-201112e14686.png)

ここで必要に応じて名前や説明を入力し、イメージを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/efb420ec-03d7-adcf-e1fc-c68764e376fa.png)

これで、現在のEC2インスタンスの状態が保存されたAMIが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6a184364-0c3b-742e-19fb-f092956c8865.png)

### 2. インスタンスのネットワークインターフェースを残したまま削除
次に、EC2コンソールで対象インスタンスのネットワークインターフェースを確認し、そのIDをメモしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5a77fab1-fbde-6978-40f3-ef478b542a15.png)

~~インスタンスの削除前にネットワークインターフェースをデタッチ（分離）するため、``EC2 > ネットワークインターフェースから対象のインターフェースを選び、デタッチ``をクリックします。~~ ←この作業は不要。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5640cdc3-8fdf-da6d-9957-66554d1900ff.png)

デタッチを試みた際、以下のエラーが発生しました。なお、強制デタッチを有効にしても状況は改善されませんでした。

:::note alert
**ネットワークインターフェイスをデタッチできませんでした。API エラー:「The network interface at device index 0 and networkCard index 0 cannot be detached.」**
:::

そのため、対象のネットワークインターフェースを選択した状態で、「終了時の動作を変更」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d1f35387-212e-ed3f-88c1-b8518e0bd9dc.png)

ここで、インスタンス削除時に削除の有効化のチェックを外すことで、インスタンスが削除されてもネットワークインターフェースは残るように設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/88b64503-ff3a-3e10-7468-7a4ad18e3b9d.png)

デタッチできない状況だったため、そのままインスタンスを削除しました。

削除は、インスタンスの「インスタンスの状態」メニューから「インスタンスの終了」を選択して進めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/096a216c-2824-0a15-30a3-e2f6788e0df2.png)

この方法により、ネットワークインターフェースを保持しながら、インスタンスだけを削除することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8a4477cd-f67a-f878-7452-49498fda5c92.png)

### 3. AMIからの復元
最後に、作成したAMIを使用して新しいインスタンスを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/f786e2ed-bd6f-6876-c65d-febff76c5b28.png)

EC2 > AMIから対象のイメージを選び、インスタンスの起動をクリックして必要な設定を行います。

AMIから復元する際、事前に残しておいたネットワークインターフェースをアタッチしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/48c450a6-5c72-ecb0-20cb-3f262987d9ff.png)

このとき、ネットワークインターフェースが存在するサブネットと同じものを選択する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/fbc65596-daf7-3ec8-fa75-fca8248ba560.png)

:::note warn
**ネットワークインターフェースが再利用されていることを確認できました。**
:::

これで、元のネットワーク設定を保持したままインスタンスが復元されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e512ed4e-aab1-cb8a-b848-eca1bed6b5dd.png)

## まとめ

AWSのEC2インスタンスにおいて、AMIを利用したバックアップとネットワークインターフェースの再利用は、システムの復元やコスト削減に非常に有効です。

:::note
**ネットワーク設定をそのまま保持できるため、復元時に元の通信設定を維持しながら、効率的にインスタンスを再構築することが可能です。**
:::

普段行わない手順だったため、検証に時間がかかりましたが、とても勉強になりました！

## 参考文献

https://dev.classmethod.jp/articles/tsnote-ec2-ebs-eni-private-ip-replace-root-volume/

https://blog.k-bushi.com/post/tech/tips/ec2-eni-take-over-ip/