2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS Fault Injection Simulator で始めるカオスエンジニアリング入門

Last updated at Posted at 2021-05-18

概要

上記イベントで実施したAWS FISの障害発生シミュレーションハンズオンの忘備録。
それと、独自に試したAWS FISの実験内容をまとめてみる。

ハンズオンの忘備録

具体的な実施内容は上記で共有されているが、簡単に共有する。

実験内容

  1. 起動しているEC2のLinuxインスタンスを、リソースID指定によってFISの実験で停止させることができるか検証。
  2. 起動しているEC2のWindowsインスタンスを、タグ値指定によってFISの実験で終了させることができるか検証。
  3. FISの実験でEC2インスタンスを終了させた場合、設定しておいたAuto Scalingグループの最小キャパシティの数だけEC2インスタンスの起動台数を維持するかを検証。

FISの設定方法

まずは「実験テンプレート」にて、障害発生シミュレーションの設定を登録する。
設定項目は大別して以下の3つに分かれる。
ターゲット / アクション / 停止条件

ターゲット

この実験テンプレート内で実験対象としたいリソースを指定する。
ターゲットは複数指定が可能。
以下の例では、タグ:Name=Linux のEC2インスタンスを指定している。
Screen Shot 2021-05-18 at 22.46.48.png

アクション

この実験テンプレート内で指定したターゲットに対して実行するアクションを指定する。
Screen Shot 2021-05-18 at 22.51.13.png

こちらで様々な指定可能アクションを確認できる。

中でも aws:ssm:send-command は便利そう。
ターゲットであるEC2インスタンスに様々なコマンドを実行できる。

また、アクションは複数設定することが可能。
「次のあと開始 -オプション」項目の入力によってアクションの順番を指定できる。
Screen Shot 2021-05-18 at 23.04.54.png

停止条件

Amazon CloudWatch アラームとして定義したしきい値に達した場合に実験を停止する条件を指定できる。
Screen Shot 2021-05-18 at 23.08.00.png

例えば、想定以上の停止EC2インスタンスが発生した場合に実験を中止する、などが可能となる。

実験の履歴

メニューの「実験」ページにて、実験履歴を確認できる。
履歴から再実験も可能。

注意点

FISの実行には実行ロールを作成する必要がある。
ただ、作成時の「ユースケースの選択」欄に現状ではFISは存在しない。
Screen Shot 2021-05-18 at 22.00.44.png
そのため、作成したロールの信頼ポリシーを編集し、アタッチされるサービスに fis.amazon.com を指定しなくてはならない。

  1. IAMポリシー fis-policy を作成。ポリシーの編集にて以下を貼り付ける。

2. IAMロール fis-role を作成。
 アクセス権限ポリシー: fis-policy
 ユースケースの選択: EC2 (一時的にEC2を選択しておく)
3. IAMロール fis-role の信頼関係を編集。以下を貼り付ける。

個人的に試した実験

Auto Scaling のグループサイズ:最小キャパシティ: 2に設定。
FISで対象のインスタンスを終了させても、最小構成台数2台をキープするか検証。

1. Auto Scalingグループの作成

項目 設定値
Auto Scaling グループ名 linux-auto-healing2
起動テンプレート auto-healing-linux (<-ハンズオンのものを再利用)
ネットワーク VPC: 適当
サブネット: 適当
ヘルスチェック ヘルスチェックの猶予期間: 60秒
グループサイズ 希望する容量: 2
最小キャパシティ: 2
最大キャパシティ: 2

「Auto Scalingグループを作成」クリックで、タグ:Name=Linux のEC2インスタンスが2台起動することを確認。
Screen_Shot_2021-05-18_at_20.59.11.png

片方のタグ:Name を "Linux2" に編集しておく。

2. FIS 実験テンプレート登録

項目 設定値
説明 linux-terminate2
IAMロール fis-role (<-ハンズオンのものを再利用)
ターゲット > ターゲットを追加 名前: linux2
リソースタイプ:aws:ec2:instance
ターゲットメソッド: リソースタグとフィルター
選択モード: すべて
リソースタグ: キー=Name / 値: Linux
アクション > 新しいアクション 名前: linux-terminate2
アクションタイプ: aws:ec2:terminate-instances
ターゲット: linux2 (<-ターゲットで追加したもの)

「実験テンプレートを作成」クリック。

3. FIS 実験

作成した実験テンプレートの詳細画面から実験を開始。

Screen_Shot_2021-05-18_at_21.05.50.png
開始してしばらくすると、FISの実験設定により、Name=Linux のEC2インスタンスが終了する。

Screen_Shot_2021-05-18_at_21.08.37.png
しばらくすると、Auto Scalingの最小キャパシティの設定通り、Name=Linux のEC2インスタンスが起動することが確認できた。

所感

  • 従来では難しかったカオス的な振る舞いをする分散システムの連結検証を行う上で、有効な選択肢となるのではないか。
  • 実験手順を明確に定義できるのは便利。実験テンプレートはCloudFormation化できるのか?(要調査)
  • リージョン・AZを指定した障害シミュレーションはまだ未対応とのこと。
  • 今後はターゲットも増えていくと思われる。個人的にはなるべく早めにLambdaに対応して欲しい。
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?