1 AWS Fault Injection Simulatorってなに?
- AWS FIS
- フォルトインジェクションテストを実行することのできるフルマネージドサービス
- AWSにて構築した環境にて障害を意図的に発生させることができ、その時のシステムの挙動を確認することができる
- 結果より、システムの弱い点を洗い出し、機能やサービスのパフォーマンス向上につなげることができる
2 早速使っていく (チュートリアル編)
AWSのドキュメントを見ながらチュートリアルを進めていく
https://docs.aws.amazon.com/fis/latest/userguide/what-is.html
2.1 事前準備
2.1.1 テスト内容の決定
- どのようなテストを実行するか決定する
- 1つのテストに複数アクション、複数ターゲットを設定することができるが、組み合わせる必要のないものは分けて実験テンプレートを作成する方が良い
2.1.2 IAMポリシー、ロールの設定
- デフォルトではAWS FISから各サービスを実行する権限がないため、設定していく
ロール
IAMロールを作成する
fisへ変更するため、選択して編集する
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "fis.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
ここでロールARNをコピーしておく
ポリシーの作成1
- JSONタブを選択
- 以下をコピーして貼り付け
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FISPermissions",
"Effect": "Allow",
"Action": [
"fis:*"
],
"Resource": "*"
},
{
"Sid": "ReadOnlyActions",
"Effect": "Allow",
"Action": [
"ssm:Describe*",
"ssm:Get*",
"ssm:List*",
"ec2:DescribeInstances",
"rds:DescribeDBClusters",
"ecs:DescribeClusters",
"ecs:ListContainerInstances",
"eks:DescribeNodegroup",
"cloudwatch:DescribeAlarms",
"iam:ListRoles"
],
"Resource": "*"
},
{
"Sid": "IAMPassRolePermissions",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": "arn:aws:iam::111122223333:role/roleName"
},
{
"Sid": "PermissionsToCreateServiceLinkedRole",
"Effect": "Allow",
"Action": "iam:CreateServiceLinkedRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "fis.amazonaws.com"
}
}
}
]
}
以下の行は、先ほどコピーしたARNに置換する
"Resource": "arn:aws:iam::111122223333:role/roleName"
- タグは必要あればつける
- 今回はskip
- 名前と説明をつけ、作成
- 今回はこちら : AwsFisFullAccessPolicy #### ポリシーの作成2
- 以下の設定でポリシーを作成
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowFISExperimentRoleReadOnly",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ecs:DescribeClusters",
"ecs:ListContainerInstances",
"eks:DescribeNodegroup",
"iam:ListRoles",
"rds:DescribeDBInstances",
"rds:DescribeDbClusters",
"ssm:ListCommands"
],
"Resource": "*"
},
{
"Sid": "AllowFISExperimentRoleEC2Actions",
"Effect": "Allow",
"Action": [
"ec2:RebootInstances",
"ec2:StopInstances",
"ec2:StartInstances",
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*"
},
{
"Sid": "AllowFISExperimentRoleECSActions",
"Effect": "Allow",
"Action": [
"ecs:UpdateContainerInstancesState",
"ecs:ListContainerInstances"
],
"Resource": "arn:aws:ecs:*:*:cluster/*"
},
{
"Sid": "AllowFISExperimentRoleEKSActions",
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*"
},
{
"Sid": "AllowFISExperimentRoleFISActions",
"Effect": "Allow",
"Action": [
"fis:InjectApiInternalError",
"fis:InjectApiThrottleError",
"fis:InjectApiUnavailableError"
],
"Resource": "arn:*:fis:*:*:experiment/*"
},
{
"Sid": "AllowFISExperimentRoleRDSReboot",
"Effect": "Allow",
"Action": [
"rds:RebootDBInstance"
],
"Resource": "arn:aws:rds:*:*:db:*"
},
{
"Sid": "AllowFISExperimentRoleRDSFailOver",
"Effect": "Allow",
"Action": [
"rds:FailoverDBCluster"
],
"Resource": "arn:aws:rds:*:*:cluster:*"
},
{
"Sid": "AllowFISExperimentRoleSSMSendCommand",
"Effect": "Allow",
"Action": [
"ssm:SendCommand"
],
"Resource": [
"arn:aws:ec2:*:*:instance/*",
"arn:aws:ssm:*:*:document/*"
]
},
{
"Sid": "AllowFISExperimentRoleSSMCancelCommand",
"Effect": "Allow",
"Action": [
"ssm:CancelCommand"
],
"Resource": "*"
}
]
}
- 今回はこちらで名前を決定 : AwsFisAllowService
ロールにポリシーをアタッチ
これで権限の準備は完了
2.1.3 EC2インスタンスの作成
- テスト用にEC2インスタンスを2つ立ち上げる
これで検証用環境の準備は完了
2.1.4 CloudWatchの設定(任意)
後々CPU負荷テストを設定するため、CloudWatchにてアラームの設定をしておく (stopさせる)
作成したインスタンスに対して、とりあえずCPUUtilization(CPU使用率)で設定する(通知は設定するか、削除するかは好きな方でok)
これでやっとFIS以外の事前準備は完了
2.2 実験テンプレート作成
今回、シンプルな実験を定義する
内容としては
1. EC2インスタンス1台停止
2. 1.の後にEC2インスタンス全停止
というフォルトインジェクション
- 説明は適当な物を入力
- アクションを作成
- デフォルトに設定されていたターゲットの編集
- 新たなターゲットの追加
- 再度アクションの追加を行う
- 停止条件に先ほどCloudWatchで設定したアラームを設定する (任意)
2.3 実験の開始
2.4 実験の確認
今回EC2インスタンスをstopする実験だったが、実験完了後に自動的に起動するため、EC2を確認すると起動している
メトリクスを確認すると途中にstopしていたことがわかる
(わかりづらいが、途中stopしていた)
2.5 実験の後片付け
実験が完了完了したら不要なものは削除する
- EC2インスタンス
- IAMロール、ポリシー
- 実験テンプレート
- CloudWatchアラーム
3 Next
- 今回、AWS FISにいついてチュートリアルを実行
- Nextとしてはより実用的に使うためのアクションの設定方法を詳しくみていく
- EC2インスタンスのstopだけでは実験としては十分な設計はできないため