見てたってバグなんかわかりゃしないよ
というわけで実際に障害を起こして試してみようというカオスエンジニアリングのサービス AWS FIS について.
目次
- はじめに
- 検証用 EC2 インスタンスの作成
- SSM ドキュメントの作成
- FIS テンプレートの作成
- FIS 実験の起動
はじめに
今回作る構成はこちら
リソースの詳細について
- EC2 関連
- EC2 インスタンス
- SSM からドキュメントで定義された内容を実行するために ssm-agent をインストールしておきます.
- IAM Role
- EC2 から SSM を利用するための AmazonEC2RoleforSSM ポリシを設定します.
- EC2 インスタンス
- System manager 関連
- SSM ドキュメント
- FIS から実行する SSM ドキュメント.
- SSM ドキュメント
- FIS 関連
- 実験テンプレート
- Action
- 起こす障害を定義します。今回は独自の SSM ドキュメントを作成して設定します.
- Target
- 障害を起こす対象を定義します。今回は EC2 インスタンスを作成して利用します.
- 停止条件
- 障害の発生を停止する CloudWatchAlarm を設定します.
- IAM Role
- FIS 用の障害発生に必要な権限をもたせた IAM Role .
- Action
- 実験テンプレート
では、順番に見ていきましょう.
検証用 EC2 インスタンスの作成
インスタンスに付与する IAM Role を作成します.
- マネジメントコンソールにログイン
- IAM を検索して IAM の画面を表示する
- 左メニューのロールを選択
- ロールを作成ボタンからロール作成画面を表示
- 一般的なユースケースに EC2 を選択して次のステップ
- ポリシーのフィルタから
AmazonEC2RoleforSSM
を検索 - チェックを入れて次のステップ
- ロール名に
ec2-fis-test-role
を入力してロールの作成
先ほどの IAM Role を適用して EC2 インスタンスを作成します.
基本的に無料枠やデフォルトの設定で大丈夫ですが2点ほど注意があります
-
ステップ 3: インスタンスの詳細の設定 で IAM ロールに
ec2-fis-test-role
を設定してください. -
Name
タグにfis-test-inst
を設定します.
インスタンスが実行中になれば EC2 インスタンスの作成完了です.
後の行程でインスタンス ID を使用するので控えておきます.
SSM ドキュメントの作成
FIS から起動する SSM ドキュメントを作成します.
- SSM を検索して SystemsManager の画面を表示します
- 左メニューの 共有リソース ドキュメントから SSM ドキュメントの画面を表示します
- Create document から Command or Session でドキュメントの作成画面を表示します
- 名前に
fis-test-doc
を入力します - ターゲットタイプに
/AWS::EC2::Instance
を入力します - ドキュメントタイプに
コマンドドキュメント
を入力します - コンテンツに YAML を選択して以下の内容を入力してドキュメントの作成を選択します
---
schemaVersion: "2.2"
description: "fis test ssm document"
parameters:
Message:
type: "String"
description: "test message"
default: "This is a test message"
mainSteps:
- action: "aws:runShellScript"
name: "testSsmDocument"
inputs:
runCommand:
- "echo Message"
これで SSM ドキュメントが作成できました.
FIS テンプレートの作成
FIS で使用する IAM Role を作成します.
- IAM を検索して IAM の画面を表示する
- 左メニューのロールを選択
- ロールを作成ボタンからロール作成画面を表示
- 一般的なユースケースに EC2 を選択して次のステップ
- ※ ここは FIS を選択したいのですが、選べないので一旦 EC2 を指定します.
- ポリシーのフィルタから
PowerUserAccess
を検索 - チェックを入れて次のステップ
- ※ 今回は簡単化のため
PowerUserAccess
を選択してしまいます - 実際に利用する場合は必要に応じて最小権限を付与して下さい
- ※ 今回は簡単化のため
- 必要に応じてタグを設定して次のステップ
- ロール名に
fis-test-role
を入力してロールの作成
このままでは FIS からこのロールを参照できないので信頼関係の設定を追加します.
- ロールの画面から
fis-test-role
でフィルタします - ロール名を選択して詳細画面を表示します
- 信頼関係タブから信頼関係の編集で編集画面を表示します
- 以下のように書き換えて信頼ポリシーの更新で更新します
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
- "Service": "ec2.amazonaws.com"
+ "Service": "fis.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
これで準備ができましたので FIS テンプレートの作成に入ります.
- FIS を検索して Fault Injection Simulator の画面を表示します
- 左メニューの実験テンプレートから実験テンプレートの画面を表示します
- 実験テンプレートを作成から作成画面を表示します
- 基本情報
- 説明に
FIS test template
を入力 - 名前に
fis-test-template
を入力 - IAM ロールに
fis-test-role
を選択
- 説明に
- アクション
- アクションを追加
- 名前に
fis-test-action
を入力 - アクションタイプに
aws:ssm:send-command
を選択 - documentArn に
arn:aws:ssm:ap-northeast-1:<自分のアカウントID>:document/fis-test-doc
を入力- arn のフォーマットは こちら
- duration に
分
と2
あたりを設定しておきましょう - 保存ボタンで確定します
- ターゲット
-
Instances-Target-1
の編集ボタンからターゲットの設定をします - リソース ID に
fis-test-inst
のインスタンス ID を設定して保存します
-
- 停止条件は今回は設定せず実験テンプレートを作成
これでテンプレートが作成できました.
次に障害を発生させてみましょう.
FIS 実験の起動
作成した実験テンプレートから実験を開始しましょう.
- 実験テンプレートの詳細のアクションから開始を選択します
-
Name
タグにfis-test-ex1
を設定し実験を開始します - 状態が
Completed
になれば成功です
今回は独自の SSM ドキュメントを定義して FIS から起動する手順を確認してみました.
(障害は起こしてないわけですが・・・)
これでカオスエンジニアリングを始めてみましょう!