AWS EC2の新機能「ルートボリューム置き換え」で障害時のリストア対応を迅速化する

# はじめに
2021/4/23のAWSのアップデートで、実行中のEC2インスタンスのルートボリュームを置き換える機能が発表されました。
本記事では、この機能を使うことで、EC2で障害が発生した時のトラブル対応がどれだけ楽になるかを検証します。

# ルートボリュームの置き換え機能とは
利用者は**EC2インスタンスを停止せず**、ルートボリュームのEBSを特定のSnapshotの状態に復元できます。

# 何が嬉しいのか
一見すると、嬉しさの分かりづらいアップデートですが、このアップデートの魅力は以下に尽きます。
## 障害時の復旧手順が簡単になり、対応速度が迅速化する
これまで、ルートボリュームを起因とした障害が発生した場合は、以下の手順で復旧をしていました。

* **EC2を停止**
* **予め取ってあったSnapshotからルートボリュームを復元 (新EBS)**
* **EC2の管理画面で旧EBSを新EBSに置き換え**
* **EC2を起動**

上記が、今回のアップデートにより、以下の1ステップで良くなります。

* **EC2の管理画面でSnapshotを指定し、旧EBSを新EBSに置き換え**

実際に見ていただくのが早いので、下記の検証で見てみましょう。

# 実際にやってみる (Linux編)
実際に操作してみます。
まずは、検証が楽であり、経過を追いやすい 「Cloud9」 のLinux EC2インスタンスで試してみます。

## 0. 事前確認
まずは、EC2が正常に稼働していることを確認します。
テスト用のファイルを作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/c621dc8e-877e-4ada-b8a6-72effe979d23.png)

## 1. Snapshotを取る
ルートボリュームのEBS Snapshotを取ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/0fe0a9c8-83dc-c73c-8d17-7c0209b1b15e.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/3a28a51c-e502-fc79-2ceb-16894f3d4fba.png)

## 2. EC2上でテストファイルを削除する
差分を確認するため、テストファイルを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/5bd48269-e924-ad18-16bf-02d01f31fd8f.png)

## 3. ルートボリュームを置き換える
EC2のマネジメントコンソールで、各EC2の「ストレージ」の画面から操作します。
以下の画面で「ルートボリュームを置き換える」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/16a4ce93-80ee-807c-0b37-f2e1c283e503.png)
次の画面で復元対象のスナップショットを選択します。
復元可能なスナップショットは、自動的に絞り込まれます。
スナップショットを選択したら「置き換えタスクを作成」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/e561e63f-fdcc-48fe-7ea0-1bcc0b58b888.png)
押すと、画面は遷移しませんが、上部にタスクが作成された旨が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/9787269a-8aa3-8f2b-a8d4-fd8575ada56d.png)
画面を戻って確認すると、置き換えタスクのステータスが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/2f0daf93-0265-4f4b-d537-eaf472151d29.png)
Cloud9の画面に戻ってみると、接続が切れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/e16f6039-b1d0-1df2-f3a5-083ead14cbaf.png)
この状態で1分ほど放置していたところ、再度接続されました。
先ほど削除したテストファイルは戻っており、期待通りの動作です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/9e6d8d44-e275-6a0a-f0e2-f9a1f100059c.png)

以上のように、約2分ほどの通信断を経て、ルートボリュームをリストアできました。
通信断の時間は、条件によって前後する可能性がありますので、開発時はテストで確認しておくほうが良いです。

# 実際にやってみる (Windows編)
LinuxのEC2インスタンスに対する結果は想像しやすいですが、WindowsのEC2インスタンスでも同様に置き換えできるかを試してみます。

## 0. 事前準備
Linuxと同じく、EC2が正常に稼働していることを確認します。
テスト用のファイルを作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/19ac3b26-7de0-cc60-6404-71c3c07f981d.png)

## 1. Snapshotを取る
ルートボリュームのEBS Snapshotを取ります。
Linuxの時と同じ操作のため、画面は割愛します。

## 2. EC2上でテストファイルを削除する
差分を確認するため、テストファイルを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/0149f9af-e125-e730-393d-5948e5ab4a54.png)

## 3. ルートボリュームを置き換える
先ほどと同じく置き換えます。
すると、置き換えタスクを作成して間もなく、RDP接続が切れました。

タスク一覧でしばらく待機していると、タスクが「保留中」から「完了」に変わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/5e233010-0fa0-dc40-420f-28b8631dc404.png)
RDP接続し直すと、先ほど削除したテストファイルは戻っており、Shutdown Event Trackerが起動していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/5010aa52-419d-37f5-bc12-1c9cb55a450e.png)
ライセンス認証の状態も確認しましたが、問題なさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211986/fd8cf311-5fbc-1bbc-7bff-70d887ce6600.png)

以上のように、約3分ほどの通信断を経て、ルートボリュームをリストアできました。
Linuxと同じく、通信断の時間は、条件によって前後する可能性がありますので、開発時はテストで確認しておくほうが良いです。

# その他ポイント
* 今回の機能を使った場合、EC2を停止しないため、作業の前後でPublic IPは変わりません。
* インスタンスストアボリュームがルートボリュームの場合には置き換えることができません。
* ベアメタルインスタンスのルートボリュームを置き換えることはできません。

# まとめ
新たに登場した「ルートボリュームの置き換え」機能により、ルートボリュームを起因とした障害時の復旧作業のスピードを迅速化できます。
但し、作業中は通信断が発生するため、監視をしている場合は静観対応が必要となりますので、注意しましょう。

# 参考文献
* [EC2 enables replacing root volumes for quick restoration and troubleshooting](https://aws.amazon.com/jp/about-aws/whats-new/2021/04/ec2-enables-replacing-root-volumes-for-quick-restoration-and-troubleshooting/) (From AWS公式)
* [Replace an Amazon EBS volume](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-restoring-volume.html#replace-root) (From AWS公式)