EBSスナップショットを利用してEC2インスタンスを複製したりリストアしたりしてみた

## はじめに
Amazon Data Lifecycle Managerなどでバックアップ用に作成したEBSスナップショットを使い、EC2インスタンスを複製する手順をまとめてみます。
また、EBSスナップショットを使いリストアする方法についても触れてみようと思います。

## インスタンス情報の確認
EC2インスタンスの詳細情報から、複製元のインスタンスの情報を確認します。

インスタンスID、インスタンスタイプ、IAMロール(インスタンスプロファイル)、VPC ID、サブネットID、プライベートIPアドレス、アベイラビリティゾーン、NIC、セキュリティグループ設定などを確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/d5ff8794-2f2a-8460-32c1-c489cb621951.png)
ストレージタブで、インスタンスにアタッチされているボリュームの情報を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/a7eb0436-e8a9-c5c6-81f9-1425396c8846.png)
この例では、インスタンスには、3つのEBSボリュームがアタッチされており、以下のような構成になっています。
| ボリュームID | デバイス名 | ボリュームサイズ(GiB) | ルートデバイス |
|:-|:-|:-|:-|
| vol-09XXXXXXXXXXXXXXX | /dev/sda1 | 100 | 〇 |
| vol-06XXXXXXXXXXXXXXX | /dev/sdg | 100 | × |
| vol-0aXXXXXXXXXXXXXXX | /dev/sdh | 100 | × |

どのボリュームIDのEBSが、どのデバイスとしてアタッチされているかを確認しておきます。

## EBSスナップショットの確認
EBSスナップショットの一覧から、上記EBSボリュームから作成されたスナップショットを確認します。

:::note info
EBSスナップショット作成の際に、NameタグにEC2インスタンスのNameタグと同じものを付けておくようにすると、対象となるスナップショットが探しやすくなります。
:::
今回の例では、3つのスナップショットがあるため、どのスナップショットが、どのEBS(ボリュームID)から作成されたものかを確認します。

スナップショット作成元のボリュームIDは、スナップショットの詳細画面を開かないと確認できないため、以下の例のように、スナップショットのNameタグで絞り込んでから、各スナップショットとEBSの対応関係を確認するか、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/a5051146-abc5-9907-eb05-fb8b926bad9c.png)
スナップショット一覧の検索窓で、ボリュームIDを指定して検索して確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/017b18e1-bebd-96c1-9d0a-42f12aa20729.png)
上の例では、スナップショット作成元のボリュームIDが`vol-09`で始まるものなので、/dev/sda1のルートデバイスのスナップショットという事が分かります。

この例では、EBSとスナップショットの関係は、以下のようになっている事が確認できました。
| ボリュームID | デバイス名 | ボリュームサイズ(GiB) | ルートデバイス | スナップショットID |
|:-|:-|:-|:-|:-|
| vol-09XXXXXXXXXXXXXXX | /dev/sda1 | 100 | 〇 | snap-00XXXXXXXXXXXXXXX |
| vol-06XXXXXXXXXXXXXXX | /dev/sdg | 100 | × | snap-0fXXXXXXXXXXXXXXX |
| vol-0aXXXXXXXXXXXXXXX | /dev/sdh | 100 | × | snap-0dXXXXXXXXXXXXXXX |

ここまでで、事前の確認は終わりです。

:::note warn
この後、インスタンスの複製やリストアを行いますが、ここまでの確認が不十分だったり間違っていたりすると、複製やリストアに失敗するため、確認はしっかり行っておきます。
:::

## EC2インスタンスを複製する
ここからは、EC2インスタンスを複製する手順です。
## EBSスナップショットからAMIを作成
まず、EBSスナップショットからAMIを作成します。

スナップショットの一覧から、ルートデバイスのスナップショット(この例では、`snap-00XXXXXXXXXXXXXXX`)を選択し、アクションから「スナップショットからイメージを作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/1d2883bf-72b4-1195-e613-027c44f28524.png)
イメージ名と説明を入力し、ルートデバイス名が正しい事を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/6eb5f979-aa0d-62b7-5a28-f668bec2f8a4.png)
次に、ブロックデバイスマッピングの設定をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/a2d40324-e3d4-ec71-1f3e-7133d27b3191.png)
デバイスタイプ、デバイス名、サイズ、ボリュームタイプが複製元と同じである事を確認します。

今回の複製元インスタンスは、ルートデバイス以外に2つのボリュームがあるので、「ボリュームを追加」をクリックし、デバイス名/dev/sdg、/dev/sdhのEBSスナップショットもイメージに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/6d76a961-5773-892d-2ccb-27a1635cf872.png)
事前に確認しておいた、デバイス名とボリュームサイズ、スナップショットIDの組み合わせと同様にマッピングされている事を確認します。
| ボリュームID | デバイス名 | ボリュームサイズ(GiB) | ルートデバイス | スナップショットID |
|:-|:-|:-|:-|:-|
| vol-09XXXXXXXXXXXXXXX | /dev/sda1 | 100 | 〇 | snap-00XXXXXXXXXXXXXXX |
| vol-06XXXXXXXXXXXXXXX | /dev/sdg | 100 | × | snap-0fXXXXXXXXXXXXXXX |
| vol-0aXXXXXXXXXXXXXXX | /dev/sdh | 100 | × | snap-0dXXXXXXXXXXXXXXX |

設定に問題ない事が確認できたら、「イメージを作成」をクリックしてAMIを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/ed5d636d-5b76-0354-2ff4-7435ec8d797b.png)

## 作成したAMIからEC2インスタンスを起動
AMIの一覧で、作成したAMIを選択し、EC2インスタンスを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/da76b53e-aa8f-c0ab-9fc4-7900ad8d1a08.png)
インスタンスタイプを複製元と同じにし、キーペアの設定、セキュリティグループの設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/ec758d60-4ba1-681e-0160-241834afad2d.png)
ストレージの設定を確認し、設定に問題がなければ「インスタンスを起動」をクリックし、インスタンスを起動します。

起動後、動作確認を行い、動作に問題がなければ、インスタンスの複製は完了です。

:::note warn
EBSスナップショット作成時に、データの整合性がとれていなかったり、ルートデバイスの指定が間違っていた場合、インスタンスの起動に失敗したり、動作がおかしくなる場合があります。その際には、スナップショットの再作成などを行ってください。
:::

## EC2インスタンスのリストア
障害などが発生し、バックアップしたEBSスナップショットからEC2インスタンスのリストアを行う必要がある場合、大きく以下の2つの方法があります。
1. EBSスナップショットからAMIを作成し、EC2インスタンスを複製する(上述してきた内容)
1. EBSスナップショットからEBSを作成し、EC2インスタンス停止後、EBSのデタッチ、スナップショットから作成したEBSのアタッチを行いインスタンスを起動する

1の方法の場合、元のインスタンスを止めずに残しておけるのがメリットではありますが、リストア(というより複製)により、プライベートIPアドレスが変わってしまうデメリットがあります。

その為、固定IPを変えずにリストアしたい場合は、2の方法でリストアする必要があります。

以下では、2の方法でのリストアについて記載します。
## EBSスナップショットからEBSを作成
スナップショットからEBSボリュームを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/4e3ffb6a-67f6-4948-d73f-a9128c6d652e.png)
今回の例では、以下3つのスナップショットからEBSを作成します。
| ボリュームID | デバイス名 | ボリュームサイズ(GiB) | ルートデバイス | スナップショットID |
|:-|:-|:-|:-|:-|
| vol-09XXXXXXXXXXXXXXX | /dev/sda1 | 100 | 〇 | snap-00XXXXXXXXXXXXXXX |
| vol-06XXXXXXXXXXXXXXX | /dev/sdg | 100 | × | snap-0fXXXXXXXXXXXXXXX |
| vol-0aXXXXXXXXXXXXXXX | /dev/sdh | 100 | × | snap-0dXXXXXXXXXXXXXXX |

ボリュームを作成する際、ボリュームタイプやサイズの他に、EC2インスタンスがあるアベイラビリティゾーン(AZ)も指定する必要があるため、あらかじめAZを確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/69ea6085-5cd9-9294-5d24-37ff58564fcb.png)
ボリュームの情報を入力、確認後、「作成」をクリックしてEBSボリュームを作成します(この例では3つ作成)。

## EC2インスタンスを停止
リストアする対象のEC2インスタンスを停止します。

## EBSボリュームのデタッチ
ボリュームの一覧で、停止したEC2インスタンスにアタッチされているEBSボリュームをデタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/9a14f23e-08e3-15c1-52fe-4f58360e545b.png)
この例では、3つのボリュームをそれぞれ選択し、「アクション」から「ボリュームのデタッチ」を選択してデタッチします。

## スナップショットから作成したEBSボリュームをEC2インスタンスにアタッチ
ボリュームの一覧で、スナップショットから作成したEBSボリュームを選択し、リストアするEC2インスタンスにアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/326c977a-87cb-38a6-c13e-ae80872b5696.png)
この例では、3つのボリュームをそれぞれ選択し、「アクション」から「ボリュームのアタッチ」を選択してアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2554521/76393519-886a-673e-7331-9db0dc5c7411.png)
アタッチするインスタンスのIDとデバイス名を正しく入力し、ボリュームをインスタンスにアタッチします(この例では3つのEBSボリュームをアタッチ)。

アタッチ完了後、EC2インスタンスを起動します。
起動および動作確認で問題がなければ、リストア完了です。

## おわりに
バックアップとして取得したEBSスナップショットから、EC2インスタンスを複製する方法、リストアする方法について記載しました。

今回記載した方法以外にも、一部のファイルのみリストアしたい場合は、スナップショットから作成したEBSボリュームを、ルートボリューム以外のボリュームとして一時的にアタッチし、OSからマウントしてファイルをコピーなどしてリストアする方法もあります。

バックアップを取得していても、リストア・リカバリできなければ意味がありません。
きちんとリストア・リカバリできるようバックアップしつつ、いざという時にリストア・リカバリできるよう、手順などを整理しておきましょう。