AWS Fault Injection Simulatorハンズオン + ハンズオン後の環境見返し


[AWSの基礎を学ぼう 特別編　最新サービスをみんなで触ってみる はじめてのカオスエンジニアリング](https://awsbasics.connpass.com/event/207751/)に参加しました。
2020年12月にアナウンスされた「AWS **F**ault **I**njection **S**imulator」を皆で触ってみる会。
以降、**FIS**と記載

FISはインスタンスを停止、プロセスKillしたり、負荷を与えてみたりという実験をマネージドに行えるサービス(という理解)
[AWS Fault Injection Simulator とは](https://docs.aws.amazon.com/ja_jp/fis/latest/userguide/what-is.html)

ハンズオンの手順は公開されているので、そのリンクを貼りつつ
参加して得られた情報や所感、ハンズオンのあと環境を見返してみて気づいたことなどを記載します。
インスタンスを止めたり、負荷を与えるのは手動でもできますが、FISを使うとどういう利点があるか？共有できたら幸い。

# ハンズオン

## 手順と設定のリポジトリ
https://github.com/harunobukameda/AWS-FIS-Auto-Scaling

 - 「AWS Fault Injection Simulator ワークショップ.pdf」がPDFでの手順書
 - ReadMeにリンクされてる https://master.d3lyeoeu7zm1la.amplifyapp.com/appendices/ がwebでの手順書


30分くらいあればできると思います。

:warning: ハンズオン用に使うアカウントに、もし別の用途のインスタンスが既にある場合、間違ってそれをFISの対象にしないようには注意が必要。

## このハンズオンでやること
 - WindowsとLinuxインスタンスをFISでStopとTerminate。実験終了後の復帰確認。
    - 実験ターゲットをインスタンスIDで指定
    - 実験アクションの選択方法

 - Auto ScalingのインスタンスをFISでTerminate
    - 実験ターゲットをタグで指定
    - 実験によるTerminateのあとAuto Scalingによる復旧

FIS使ってインスタンス落とせるとちょっと嬉しいです


## 詰まるかもしれないところ

１点挙げるとしたら以下くらい。FIS特有の話ではないけど。

 - IAMの権限や信頼関係の反映にはタイムラグがあるので、FIS実行時に「ちゃんと権限つけてるのに権限エラーが出た」みたいなのは、ちょっと待って再実行したらいけたりする


# 手順外で学べたこと

ハンズオンを進める中で講師の方の補足や、チャット欄でのやりとり。自分で触ったところなど、覚えているところだけメモ。

## FIS

### アクション

ハンズオンではEC2のStopとTerminateをやりましたが、他にもアクションはいろいろ選べる。
とくにSSMコマンドが選べるのは実用性高い。

![スクリーンショット_2021-05-15_15_20_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/f87a5e62-5af9-0fcd-39dc-fda2ddfd6ed8.png)

 - [SSM Agent for AWS FIS actions](https://docs.aws.amazon.com/fis/latest/userguide/actions-ssm-agent.html#specifying-ssm-actions)
    - CPUストレス、Processキル、Memoryストレス、Networkレイテンシー

アクションは複数設定でき順番もコントロール可能。順番のコントロールは「このアクションの後開始」という条件をつけることで、できるようです。
最初、一生懸命ドラッグしてアクションの実行順を動かそうとしてました。

![スクリーンショット_2021-05-15_15_38_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/8684973c-88af-8062-d851-84ff3e91bae9.png)

### ターゲット

現在選べるもの
![スクリーンショット 2021-05-15 16.05.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/de81fb3a-d09f-d20e-a729-bbac5a27d6bc.png)

キャプチャ貼って気づいたけど、IAMロールがあるな、、これ権利一時的に剥奪したりしたらマネージドなサービスにアクセスできないなどの実験もできるのかな、、、影響範囲は考えないといけないけど。(未検証)

### 実験の中断
CWメトリクスと連携させることで、実験を中止させる機能がある。
たとえば「20%しかインスタンスを落とさないはずが、CWメトリクスで想定外のダウン率を検知したらただちに実験を止める」などに使える。

![スクリーンショット 2021-05-15 15.43.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/c629f5d3-351a-3fc6-e3ba-8135be3e3827.png)


### Q.ターゲットの選択間違いの予防策を作るとしたら？

A. 今は専用の仕組みはないけど、アクションはSSMのものを使用し、そのSSMアクションに「手動承認(aws:approve)」を入れておくと、２重チェックを設けることができる。


## その他

### EC2インスタンスの一覧画面で所属しているAutoScalingグループを表示する方法


EC2インスタンス一覧画面の設定(⚙)からタグ列に「aws:autoscaling:groupName」を追加

![スクリーンショット_2021-05-15_15_26_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/a5fad3b9-e28a-fb4b-2bd8-09f5dabe2402.png)

![インスタンス___EC2_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/5387b983-e36c-fe9c-215c-053b58fa75cd.png)


ハンズオンの手順の関係上、同じNameタグを持つけどASに所属している/していないインスタンスがそれぞれできるので、それ見分けたいですね〜という話がChatで出て、他の参加者の方が「これでいけました」って感じで共有してくれました。

# ハンズオン後の環境を見返してみて

## 実験の履歴が残る

![AWS_FIS_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/a129d74a-26fd-1ff0-6418-670ef919d37a.png)


手動で実行するよりもアドバンテージがある部分だと思います。

## CloudTrail上にはどのように記録されるか？

![CloudTrail_Management_Console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43631/7c44e417-59eb-25d5-ba5d-dae8e2ca066e.png)

CloudTrailの履歴から「このTerminateはFISがやったんだよ」というのが読み取れます。
またUser nameのところに 実験の履歴のExperiment IDが含まれるので、どの実験によるものか追跡可能です。


# 所感

## FISについて

「手順を明確に定義できる」「履歴が残る」「順番のコントロールや、実験時間、CWと組み合わせた緊急停止条件」など、手動で行うよりも利点となる部分はけっこうあると感じました。

今後さらにターゲットとして選択できるサービスが増えていくといいなぁ。


## ハンズオンについて

リアルタイム参加すると質問できるし、進めながらの補足を聞いたり、他の参加者の考えや感想、質問なども見れたり情報量が多く、動いた感動もわかちあえるのがいいところだなぁと感じました。
土曜の昼という時間帯も、落ち着いて参加できるので個人的にはよかったです。