1. 事前準備
1-1. AWS マネジメントコンソールにログインする
※この手順は一番簡単なメールアドレスとパスワードでログインできる設定で記載しています。MFA を有効 にしていたり、AWS Single Sign On を利用している場合はその手順に従ってください。(パスワードだけの認証を利用されている場合、ぜひ MFA の設定 をご検討ください)
1-2. 実験の対象になる EC2 インスタンスを起動する
今回の実験の対象となる、EC2 インスタンスを起動します。今回は、Auto Scaling グループを利用して、EC2 インスタンスを起動します。こちらのドキュメント のチュートリアルに従って、Auto Scaling グループを作成し、EC2 インスタンス を起動してください。
上記の手順で Auto Scaling グループを作成すると、1 台の EC2 インスタンスが作成されるはずです。
今回の最初の実験では、2 台のインスタンスが起動している状況を対象とするため、Auto Scaling グループの設定を変更し、EC2 インスタンスを2台起動するように変更します。
EC2 のコンソール を開いてください。
左側のナビゲーションパネルを下までスクロールし、Auto Scaling グループを選択します。
インスタンス管理タブをクリックし、EC2 が 2 台起動し、ライフサイクルが InService になることを確認します。
(ステータスを確認する際は右上の更新アイコンをクリックして画面を更新してください)
これで、実験対象の EC2 インスタンスが起動できました。
1-3. AWS FIS が実験に利用する IAM ロールを作成する
ロールの作成画面で AWS サービス → EC2 を選択して次のステップ: アクセス権限ボタンを押します。
(2021 年 10 月 xx 日現在、マネジメントコンソールから信頼されたエンティティとして、AWS FIS を選択することはできないため、一時的に EC2 を設定します。この設定は後のステップで変更します。)
Attach アクセス権限ポリシー の画面で、AmazonEC2FullAccess、AmazonSSMFullAccess の 2 つのポリシーを選択して次のステップ: タグボタンをクリックします。
(本来、最小権限の法則にしたがって権限を設定すべきですが、このワークショップでは簡単のために広めの権限を設定しています。実際の環境に適用する際は、実験で必要な最小の権限を設計しテンプレートごとに適切なポリシーを持った IAM ロールを設定することを推奨します)
信頼関係の編集ページに表示されるポリシードキュメントの “Service” の値を “ec2.amazonaws.com” から ”fis.amazonaws.com” に変更します。
編集後のポリシードキュメントは下記のようになります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "fis.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
2. 実験 1 : EC2 インスタンスを停止する
2-1. EC2 インスタンスを停止するための実験テンプレートを作成する
実験テンプレートを作成画面で、下記を入力していきます。
- 説明 :「ASG 内のインスタンスを半分停止します。」
(この実験で何をするかを説明します。必須項目です) - 名前 - オプション - : FISHandson-Terminate-Instances
(ここに設定された値が Name タグに設定され、一覧画面の Name 列 で確認できます。オプションですが、管理しやすさのために設定することをお勧めします) - IAM ロール : 事前準備で作成した AWSFISHandsonRole
(実験の実行時にAWS FIS が利用するIAM ロールを設定します)
「新しいアクション」 パネルが表示されるので下記を設定して保存ボタンをクリックします。
- 名前 : Terminate-Instances
- アクションタイプ : aws:ec2:terminate-instances
- ターゲット : Instances-Target-1 が自動的に設定されます。
- この項目はアクションタイプを設定すると表示され、自動的に値が設定されます。この後の手順でターゲットの設定をしていきます。 - その他の項目 : デフォルトのまま
「ターゲットを編集」ダイアログが表示されるので、下記を設定して、保存ボタンをクリックします。
- 名前 : ASG-Instances-50Percent
- この項目は変更しなくても問題ありませんがわかりやすい名前をつけることを推奨します。 - リソースタイプ : aws:ec2:instance
- (デフォルト値のままです) - ターゲットメソッド : リソースタグとフィルターを選択
- 選択モード : ドロップダウンリストからパーセントを選択
- パーセンテージ(%) が表示されるので、50 と入力
- パーセンテージ(%) が表示されるので、50 と入力
- 新しいタグを追加 : ボタンをクリックし、表示される下記の項目に下記の値を設定します。
- キー : aws:autoscaling:groupName
- 値 - オプション に my-first-asg
実際の実験では停止条件を設定することを推奨しますが、今回は AWS FIS の基本的な動作を学ぶことが目的のため、割愛します。
停止条件を設定しないでテンプレートを作成するため、警告のダイアログが表示されます。
今回はハンズオンのために停止条件の設定を割愛しておりますので、表示されたダイアログで 作成 と入力して 実験テンプレートを作成ボタンをクリックします。
2-2. EC2 インスタンスを停止する実験を行う
「実験を開始」 画面で新しいタグを追加ボタンをクリックし表示される項目に下記の値をセットし、実験を開始ボタンをクリックします。
- キー : Name
- 値 - オプション : FISHandson-Exp1-run1
※この設定は必須ではありませんが、一覧画面で実験を識別するために設定することをお勧めします。
「実験を開始」ダイアログが表示されます。ここでは誤って実験を開始し、ワークロードに想定外の問題を発生させないための最終確認のため、フォームに 開始 と入力することを求められます。
開始 と入力すると実験を開始ボタンが有効化されるので、クリックして実験を開始します。
2-3. 実験の結果を確認する
EC2 インスタンスのコンソールに移動し、Auto Scaling グループをクリックして、 my-first-asg を選択し、インスタンス管理タブをクリックします。インスタンスの数が、一時的に 2 台になっていることが確認できるはずです (この画面に反映されるまで少しかかりますので、適宜更新ボタンを押して確認してください)。
AWS FIS から指定した Auto Scaligng グループ の EC2 インスタンスを停止する実験の手順を確認しました。なお、希望する容量を 2と設定しているため、Auto Scaligng グループは自動的に新しい EC2 インスタンスを立ち上げて状態を復帰させようとします。
アクティビティタブのアクティビティ履歴から、インスタンスが停止され、復旧のために新しいインスタンスが起動する流れが確認できます。
3. 実験 2 : 指定したインスタンスの CPU に負荷をかける
実験 1 では EC2 インスタンスの停止を試みましたが、実際の環境では CPU に負荷がかかったり、メモリなどのリソースが逼迫するなど、インスタンスは停止していなくてもアプリケーションが正常に動作しない状況が発生する場合があります。
そのような状況を再現して実験するために、AWS FIS では、AWS Systems Manager と連携して、OS 上でコマンドを実行して実験を行う機能が提供されています。また、実験のために事前に用意された AWS Systems Manager ドキュメント を利用するアクションが用意されています。ここからは、この機能を利用して、指定したインスタンスに CPU 負荷をかける実験を行います。
3-1. 実験対象のインスタンスを決定し、Systems Manager のための IAM ロールを設定する
my-first-asg のインスタンス管理タブを表示し、2台表示されたインスタンスのうち、実験の対象とする EC2 インスタンスを選択して、インスタンス ID をメモし、インスタンス ID のリンクをクリックします。
Attach アクセス権限ポリシー の画面で AmazonSSMFullAccess の 2 つのポリシーを選択して 次のステップ: タグ ボタンをクリックします。
(本来、最小権限の法則にしたがって権限を設定すべきですが、このワークショップでは簡単のために広めの権限を設定しています。実際の環境に適用する際は、実験で必要な最小の権限を設計しテンプレートごとに適切なポリシーを持った IAM ロールを設定することを推奨します)
EC2 の IAM ロールを変更画面を表示していたブラウザのタブに戻り、更新ボタンを押してから、作成した AWSFISHandsonSSMRole を選択して、保存ボタンをクリックします。
3-2. CPU 負荷をかける実験テンプレートの作成
実験テンプレートを作成画面で、下記を入力していきます。
- 説明 : 指定したインスタンスへ CPU 負荷をかけます
- この実験で何をするかを説明します。必須項目です。 - 名前 - オプション - : FISHandson-CPU-stress
- ここに設定された値が Name タグに設定され、一覧画面の Name 列 で確認できます。オプションですが、管理しやすさのために設定することをお勧めします。 - IAM ロール : 事前準備で作成した AWSFISHandsonRole
- 実験の実行時に AWS FIS が利用する IAM ロールを設定します。
画面をスクロールし、「アクション」パネルを表示して、アクションを追加ボタンをクリックします。
「新しいアクション」 パネルが表示されるので下記を設定して保存ボタンをクリックします。
- 名前 : CPU-Stress
- アクションタイプ : aws:ssm:send-command/AWSFIS-Run-CPU-Stress
- ターゲット : Instances-Target-1 が自動的に設定されます。
- この項目はアクションタイプを設定すると表示され、自動的に値が設定されます。この後の手順でターゲットの設定をしていきます。 - documentArn : 使用しているリージョンに合わせて、 arn:aws:ssm:<region>:document/AWSFIS-Run-CPU-Stress が自動的に設定されます。これは、このアクションタイプのために AWS が事前に用意した SSM ドキュメントの ARN です。
- documentParameters : {"DurationSeconds":120}
- duration : 分 に設定して、2 を入力
- その他の項目はデフォルトのまま
「ターゲットを編集」ダイアログが表示されるので、下記を設定して、保存ボタンをクリックします。
- 名前 : InstanceBurnCPUviaSSMbyId
- この項目は変更しなくても問題ありませんがわかりやすい名前をつけることを推奨します。 - リソースタイプ : aws:ec2:instance
- (デフォルト値のままです) - ターゲットメソッド : リソース ID を選択
- リソース ID : 2.1 で選択したインスタンスのインスタンス ID を指定します
- 選択モード : ドロップダウンリストから すべて を選択 (デフォルト値のままです)
停止条件を設定しないでテンプレートを作成するため、警告のダイアログが表示されます。
今回はハンズオンのために停止条件の設定を割愛しておりますので、表示されたダイアログで 作成 と入力して 実験テンプレートを作成 ボタンをクリックします。
3-3. 実験対象のインスタンスに接続し、CPU の利用状況を確認する
CPU に負荷をかける前に、対象のインスタンスにログインし、CPU の利用状況をモニタリングするコマンドを実行します。対象のインスタンスへのログインには、AWS Systems Manager Session Manager を利用します。
EC2 のコンソールに移動し、左のナビゲーションから インスタンス を選択しインスタンス一覧で 2.1 で選択したインスタンスのチェックボックスを選択します。
選択した状態で、接続 ボタンをクリックします。
「インスタンスに接続」画面で 接続 ボタン をクリックします。
(接続ボタンが有効にならない場合、2.1 で設定した IAM ロールが正しく EC2 インスタンスに設定されているかを確認してください。それでも解決しない場合、画面に表示されるメッセージに従って設定を確認してください。設定が反映されるまで少し時間がかかることがあります。)
以下のような画面が表示され、OS にログインできます。
ログインしたら、 top コマンドを実行します。

こちらのように、現在のマシンの CPU 使用率などが表示されます。このタブはそのままにして次の手順に進みます。

3-4. 指定したインスタンスの CPU に負荷をかける実験を行う
AWS FIS のコンソールで、実験テンプレートをクリックし、一覧から、FISHandson-CPU-stress のテンプレートを選択し、アクションドロップダウンから実験を開始をクリックします。
「実験を開始」 画面で新しいタグを追加ボタンをクリックし表示される項目に下記の値をセットし、実験を開始ボタンをクリックします。
- キー : Name
- 値 - オプション : FISHandson-Exp2-run1
※この設定は必須ではありませんが、一覧画面で実験を識別するために設定することをお勧めします
「実験を開始」ダイアログが表示されます。
ここでは誤って実験を開始し、ワークロードに想定外の問題を発生させないための最終確認のため、フォームに開始と入力することを求められます。開始と入力すると実験を開始ボタンが有効化されるので、クリックして実験を開始します。
少しして、更新ボタンをクリックすると、状態が Running になります。この実験は、duration を 2 分に設定しているので、2 分間実験を継続します。その間に、3-3. で接続したインスタンスで何が起きているか確認しましょう
3-5. 実験の結果を確認する
3-3. でインスタンスに接続し、top コマンドを実行したブラウザのタブに戻ります。
CPU 使用率が 100% になっていることが確認できれば成功です。

4. 後片付け
リソースを残してしまうことで、AWS の利用料が残らないように今回利用したリソースを削除していきます。
- EC2 コンソールのナビゲーションパネルから Auto Scaling グループを選択し、my-first-asg を選択して削除ボタンをクリックし、「Auto Scaling グループの削除」ダイアログのフォームに削除と入力し、削除ボタンをクリックします。
- EC2 コンソールのナビゲーションパネルからテンプレートの起動をクリックし、起動テンプレート名 my-template-for-auto-scaling のテンプレートを選択し、アクションドロップダウンから、テンプレートの削除を選択します。「my-template-for-auto-scaling を削除」 ダイアログでフォームに削除と入力し、削除ボタンをクリックします。
- AWS FIS のコンソールで実験テンプレートから、FISHandson-Terminate-Instances のテンプレートを選択し、アクションドロップダウンから、実験テンプレートを削除をクリックし、実験テンプレートを削除ダイアログでフォームに delete と入力し、実験テンプレートを削除ボタンをクリックします。FISHandson-CPU-stress も同じ手順を繰り返します。
- IAM コンソールでロールを選択し、IAM ロール一覧から、AWSFISHandsonRole を選択し、削除ボタンをクリックして表示される 「AWSFISHandsonSSMRole を削除しますか ?」ダイアログのテキスト入力フィールドに AWSFISHandsonRole と入力し、削除ボタンをクリックします。AWSFISHandsonSSMRole も同じ手順を繰り返して削除します。
5. まとめ
このハンズオンでは、EC2 インスタンスの停止や、OS 上で CPU に負荷をかける実験を AWS FIS から行う方法を試してみました。AWS FIS を利用することで、追加の agent のインストールなどを行わずに実験を自動化できることをご理解いただけたかと思います。
実際にカオスエンジニアリングを行う際は、システムの健全性を確認するためのオブザーバビリティの確保や、定常状態の定義や仮説の構築などの実験前のプロセスが重要になりますが、AWS FIS でどのような実験を自動化できるかを知ることで、カオスエンジニアリングの具体的な実施方法を考える一助になれば幸いです。
なお、Amazon EKS を利用した Kubernetes 環境に対して実験を行う方法はこちらの AWS ブログで紹介しています。ご興味ある方はぜひこちらもお試しください。
builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます
筆者プロフィール

金森政雄
アマゾン ウェブ サービス ジャパン合同会社
デベロッパースペシャリスト ソリューションアーキテクト
Web、モバイル向けの自社サービスの開発やクラウドを活用したシステムの請負開発を経験後、パートナーソリューションアーキテクトとして、アマゾン ウェブ サービス ジャパン合同会社に入社。2021 年から DevAx チームとして、開発者の方に向けたイベントやワークショップの提供を中心に活動。
最近の個人的ニュースは家の近くのラーメン屋で、「まさお」という自分の名前と同じメニューがあったこと。
AWS のベストプラクティスを毎月無料でお試しいただけます
からの記事と詳細 ( AWS Fault Injection Simulator でカオスエンジニアリングの実験を始めてみよう ! - builders.flash - 変化を求めるデベロッパーを応援するウェブマガジン | AWS - amazon.com )
https://ift.tt/3EyUlsr
0 Comments:
Post a Comment