AWS障害復旧後 すぐにやったEC2インスタンスへの暫定処置

## 前書き

先日発生したAWS Tokyoリージョンの大規模障害。

東京リージョン (AP-NORTHEAST-1) で発生した Amazon EC2 と Amazon EBS の事象概要
https://aws.amazon.com/jp/message/56489/

私もこの障害により、運用中のEC2インスタンスが一部ダウンしました。
が、幸いにも復旧に無事成功し、ほぼ事なきを得たのは不幸中の幸いでした。

こうした事案を踏まえて認識せねばと思ったことは２つ。

- **1.クラウドだって物理のマシンなんだ**
- **2.だからダウンする時だってあるんだ**

内心どこかで「国内のAWSリージョンは落ちない」みたいな妄想は持っていたと。
それが間違いだと痛感する機会となってしまいました。。。

その上で障害復旧後に「すぐにやったこと」をまとめました。

## すぐにやったこと

- 1. 復旧したインスタンスをスナップショットで立ちあげ直す
- 2.一部のインスタンスは手動でなく定期でスナップショットを取得する

## 1. 復旧したインスタンスをスナップショットで立ちあげ直す

今回の障害についてのAWSの公式見解は、以下の通りでした。

````
日本時間 2019年8月23日 12:36 より、
東京リージョン (AP-NORTHEAST-1) の単一のアベイラビリティゾーンで、
オーバーヒートにより一定の割合の EC2 サーバの停止が発生しました。
この結果、当該アベイラビリティゾーンの EC2 インスタンスへの影響及び
EBS ボリュームのパフォーマンスの劣化が発生しました。
````

サーバが熱でやられたんだ、と認識しました。
だから、今割り当てられているサーバにも物理的な故障が生じている可能性がある。
このまま利用する前に、一度安全な環境でインスタンスを立て直した方が良さそうとも判断しました。

一度インスタンスを止めて、スナップショットから別のインスタンスを立ち上げます。

### 手順

スクショはいずれも、記事用にテストで立てたものを使っています。
不要な情報は一応マスキングしていますのでご了承ください。

(1) 該当インスタンスを「stopped」にしてから「説明タブ」の「ブロックデバイス」を選択します
![scr01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/55ef30ab-0b81-173e-99e0-0ed0bb3d2cd3.png)

(2) 立ち上がる小ウィンドウ内から「EBS ID」を選択します
![scr02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/2d611917-def9-26cf-c19c-bc0ca4a57dd0.png)

(3) ボリュームの設定が立ち上がるのでここから「スナップショット」を選択します
![scr03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/ec90d571-164d-dd33-55c9-c22eaee85487.png)

(4) スナップショットの一覧が立ち上がるので「スナップショットの作成」を選択します
![scr04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/a3cdb96e-44e5-b59c-ec43-196eba307313.png)

(5) スナップショットを作成します
![scr05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/0a8de6dd-a3b8-6263-dbd6-6695ca127c37.png)
- Select resource type は「Volume」を選択
- ボリュームは「当該インスタンスのID」を指定
- 説明は「それらしい情報」を入力, 全角非対応なので注意
- タグは検索や履歴管理で役立つので「任意に設定」しておく

(6) スナップショットの作成に成功しました
![scr06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/f9e23467-e616-186f-42ff-64d228094482.png)

(7) スナップショットの一覧に作成したスナップショットが表示されました
![scr07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/425c101a-7a17-ed44-b09a-ab3bf0167adf.png)

(8) これを選択して「アクション」から「ボリュームの作成」を選べば「EC2インスタンス」を立てていけます
![scr08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/6c0e25fb-4d9d-9985-73cd-3ef40b263511.png)

IPやセキュリティグループ、VPC等、現在利用中のインスタンスの設定を加味しながら立ち上げ直しましょう。
~~（じゃないとあとで設定変更できないやんとインスタンスを作り成す羽目にあったりorz）~~

これで復旧がひとまず完了。
動作検証をかけて問題なければ利用できる状態として良さそうです。


## 2.一部のインスタンスは手動でなく定期でスナップショットを取得する

記事の冒頭にも書いた通り、私は、
内心どこかで「国内のAWSリージョンは落ちない」みたいな妄想は持っておりました。

そんなわけでスナップショットを定期取得する、といった運用も行えておらず・・・。
これを機に、障害対策の一環で定期でスナップショットを作成するのも良いかと考えました。

### 手順

(1) EC2インスタンスの左メニューより「ライフサイクルマネージャー」を選択します
![scr09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/0c90c289-dc07-1ec1-a5a8-a710018df1bc.png)

(2) スナップショットのライフサイクルポリシーを作成します
![scr10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/8bc8db76-31d8-c80c-288f-1f3369470730.png)
- 説明は「それらしい情報」を入力, 全角非対応なので注意
- Select resource type は「Volume」を選択
- これらのタグを持つターゲットは「該当するターゲットのタグ」などを選択
- スケジュール名は「それらしい情報」を入力, 全角非対応なので注意
- ポリシーを次の時間ごとに実行するは「生成頻度の時間」を入力
- 開始時刻は「該当時刻」を入力, UTC基準なので時差に注意
- 保持ルールに「スナップショット生成数の上限数」を入力

(3) 追加でスナップショットのタグや権限設定にIAMロールも指定します
![scr12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/f132fcb9-8dff-47dd-cb33-12f41ed1734e.png)

(4) 最後に作成後のポリシーのステータスを選択 スクショは「有効」ですが仮作成時は「無効」にしましょう
![scr13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/dfecb23e-55f3-6001-4b17-dd0b8ba98809.png)

(5) ライフサイクルポリシーの作成に成功しました
![scr14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/44f60d5b-d9d8-2652-30db-4a7a846dd92f.png)

(6) 一覧上では「ENABLED（有効）」になり定期スナップショットの作成が動作するようになりました
![scr15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/9d7260a4-b268-9da7-8a48-7255480cbab9.png)

## まとめ

暫定で即座にやったのはこれくらいです。

でも、やるべきことはもっとたくさんありそうですね。スナップショットだけでは足りない。
AWS Backup の活用、複数のアベイラビリティゾーンでアプリケーションを稼働させる、
サーバレスやコンテナ化でサービスをもっとマイクロ化する、ローカルにもバックアップを落とすなど。

考えたらキリがありませんが、
こうした機会をきっかけに自分たちのサービスの守り方を見つめ直す時間は必要だなと感じています。

つまり、**転んでも泣かない！！！**ってことですね！
（いやいや、泣いてたらあかんやろ。泣かんでええようにせなあかんのやでっ・・・！）

## 参考
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-creating-snapshot.html
https://dev.classmethod.jp/cloud/aws/amazon-dlm-ebs-snapshot-lifecycle/