AWS Fault Injection Simulator のSystemsManagerの実験を試してみた

# 概要

AWSからカオスエンジニアリングサービス「AWS Fault Injection Simulator」の中の
SystemsManagerを利用した実験を実施してみたいと思います。

## ざっくり、AWS FISについてのおさらい

https://aws.amazon.com/jp/fis/

### 利用可能リージョン

大阪と中国の２つのリージョンを除く全てで利用可能です。

### 料金

使用したアクション分ごと
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/c44a6fb3-d1e8-8d02-70bc-88128a9723c5.png" width=50%>

### 実験可能なサービスとアクション

https://docs.aws.amazon.com/ja_jp/fis/latest/userguide/fis-actions-reference.html

| サービス | アクション |
| :--- | :--- |
| EC2 | 起動<br>停止<br>終了 |
| ECS | コンテナインスタンスのドレインステータスへの変更<br>[コンテナインスタンスのドレインとは](https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/container-instance-draining.html) |
| EKS | ノードグループインスタンスの削除 |
| RDS | フェイルオーバー<br>再起動 |
| SystemsManager | CPU負荷<br>タスク終了<br>メモリ負荷<br>ネットワーク遅延 |
| フォールトインジェクションアクション | inject-api-internal-error<br>inject-api-throttle-error<br>inject-api-unavailable-error |
| アクションを待つ| wait |

# 実験開始

今回は、SystemsManagerを利用した実験をやってみたいと思いますが、
細かいところはチュートリアル等々で記載されているため割愛してあります。

## 前提条件

ターゲットインスタンスにSSMエージェントがインストールされて利用可能になっていること

##### 参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up.html

## 実験テンプレートの作成

マネコンで「実験テンプレートを作成」を選択します。
説明、事前に作成したIAMロールを選択します。

### アクション

名前を入力し、アクションタイプから
「AWSFIS-Run-Network-Latency」を選択する
ターゲットはAWSFISが自動で作成されたものを選択する

documentArnは、変更なし
documentParametersに以下を入力（入力値の説明は後述）

```

{"DelayMilliseconds": "200", "Interface": "eth0", "DurationSeconds":"60", "InstallDependencies":"True"}
```

documentVersionは、何も入力しない
durationは、「5」を入力して、保存ボタンを押します。

|![awsfis_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/e93432c5-030a-2b52-fda1-8f40a10d2015.png)|
|:-:|

##### AWSFIS-Run-Network-Latencyのパラメータ説明

| サービス | アクション | デフォルト |
| :--- | :--- | :--- |
| DelayMillisecond | インターフェースに追加する遅延（ミリ秒単位） | 200 |
| インターフェース | 遅延するインターフェース | eth0 |
| DurationSeconds | ネットワーク遅延テストの期間（秒単位） | ６0 |
| InstallDependencies | trueに設定すると、SystemsManagerは必要な依存関係をターゲットインスタンスにインストールします | true |

##### 参考

https://docs.aws.amazon.com/ja_jp/fis/latest/userguide/actions-ssm-agent.html

### ターゲット

AWS FISが自動的に作成したターゲットがあるため、そちらを編集します。
名前はそのままで、リソースタイプに「aws:ec2:instance」が選択されていることを確認します。
ターゲットメソッドで、リソースIDを選択し、ターゲットにするインスタンスIDを設定、
選択モードはすべてのままで、保存ボタンを押します。

|![awsfis_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/770486fd-a989-04da-f5b2-e83116bebdda.png)|
|:-:|


停止条件、タグは何も設定せずに実験テンプレートの作成を押します。

## 実験開始

実験を開始し、しばらく待ちます。

|![awsfis_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/669d67f2-9577-565f-585c-7fe414a586dd.png)|
|:-:|

|![awsfis_018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/0d415d3e-112a-7089-d13c-8d68d3f59390.png)|
|:-:|

### 実験中のPing画面

ネットワークが遅延しているのが確認出来ます。

|![awsfis_010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/64db1fa4-669f-b610-9cda-efe585d866b1.png)|
|:-:|

|![awsfis_011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/44af2d75-ede4-2a77-634b-be9b236bb75a.png)|
|:-:|

## 実験停止

次に、実験を停止の挙動をみてみたいと思います。

実験テンプレート一覧へ戻り、実験テンプレートを選択し、実験を開始します。
実験が開始されたら、アクションの「実験の停止」を選択します。

|![awsfis_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/918046b7-7dee-4727-ce43-1f13aa852bf6.png)|
|:-:|

### 実験中のPing画面

ネットワークの遅延が発生していることが確認できました。
その後、停止を実行して、少し遅れて止まったことが確認出来ました。

|![awsfis_012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/751b5948-b3fd-3dec-82be-220d62ebb6dc.png)|
|:-:|

## 実験テンプレートの更新

次に「duration」の値を変更した場合にどのような挙動をするのか見てみたいと思います。
「duration」を変更するため、テンプレートを更新します。

アクションの「更新」を選択
アクションのセクションから、該当のアクションを編集します。
durationを「5」から「10」に変更して、保存、テンプレートの更新を押します。

|![awsfis_013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/099441ed-9408-3661-67c8-e0fc772277b9.png)|
|:-:|

## 実験の再開

再度、実験を開始してみます。
ステータスが「pending」から、「Completed」になったら、実験終了です。

|![awsfis_014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/295d106d-356c-4d8b-891f-de22f368eaee.png)|
|:-:|

|![awsfis_015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/26ae1ed6-5f80-ea17-ddfe-fba342fa7e6e.png)|
|:-:|

### 実験中のPing画面

ネットワークの遅延が発生するタイミングは、
durationが「5」と「１０」の場合で体感的に違いは感じませんでした。

|![awsfis_010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/64db1fa4-669f-b610-9cda-efe585d866b1.png)|
|:-:|

|![awsfis_011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641560/44af2d75-ede4-2a77-634b-be9b236bb75a.png)|
|:-:|

# 所感

自前で実装しているようなところがAWSのマネージサービスを利用して試験が可能となり、
かつAWSへの申請も不要？となるのであれば、利用用途はあるのではないかと思いました。

今後も色々な機能が追加されるとのことなので、引き続き、追っていきたいサービスだと思いました。

誰かの参考になれば幸いです。