LoginSignup
0
0

More than 1 year has passed since last update.

AWS Fault Injection Simulator触ってみる

Posted at

概要

意図的に障害を起こすことで、事前の予防策や復旧について学ぶことが目的のサービス
カオスエンジニアリングというらしい
これをAWSサービスに対してテンプレートを組んで行えるようにしたサービス
楽しそうなので触ってみる

準備

FIS経由で各サービスを動かすので必要なポリシーをアタッチしたIAMロールを作成する

ポリシー作成

とりあえず、ドキュメントに記載がある触りたいサービスの許可ポリシーをJSON形式で作成
また、後ほど実験テンプレートのログをcloudwatchに送信するためにcloudwatchLogsへのフルアクセスも追加

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowFISExperimentRoleEC2Actions",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:StartInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        },
        {
            "Sid": "AllowFISExperimentRoleSpotInstanceActions",
            "Effect": "Allow",
            "Action": [
                "ec2:SendSpotInstanceInterruptions"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        },
        {
            "Sid": "AllowFISExperimentRoleECSUpdateState",
            "Effect": "Allow",
            "Action": [
                "ecs:UpdateContainerInstancesState"
            ],
            "Resource": "arn:aws:ecs:*:*:container-instance/*"
        },
        {
            "Sid": "AllowFISExperimentRoleECSStopTask",
            "Effect": "Allow",
            "Action": [
                "ecs:StopTask"
            ],
            "Resource": "arn:aws:ecs:*:*:task/*"
        },
        {
            "Sid": "AllowFISExperimentRoleRDSReboot",
            "Effect": "Allow",
            "Action": [
                "rds:RebootDBInstance"
            ],
            "Resource": "arn:aws:rds:*:*:db:*"
        },
        {
            "Sid": "AllowFISExperimentRoleRDSFailOver",
            "Effect": "Allow",
            "Action": [
                "rds:FailoverDBCluster"
            ],
            "Resource": "arn:aws:rds:*:*:cluster:*"
        },
        {
            "Action": [
                "logs:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
ロール作成

カスタム信頼ポリシーを自前で入力してロールを作成 (ポリシーはさっき作ったものをアタッチ

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                  "fis.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

FISの実験テンプレートを作成

今回はRDSのフェイルオーバを試してみるので、アクションタイプは「aws:rds:failover-db-cluster」を指定
他にもEC2やECSなどに対して実行できる

実行

先ほど作成したテンプレートの「実験の開始」で即座に実行される
フェイルオーバが走り、cloudwatchに実行ログが送信されればok

雑記

他にもEC2にCPU/IO負荷をかけたり、スポットの強制回収ができたりする模様
テストしたいけど、どうやってテストしたら良いかわからないときにFISを覗いてみればうまくテストできるかもしれない

テストの終了条件にcloudwatchアラームを設定など汎用性も高いので、具体的なテストプランを構築して負荷/障害試験を行うなど色々と楽しめそう

0
0
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
0
0