search
LoginSignup
0

posted at

AWS Fault Injection Simulator触ってみる

概要

意図的に障害を起こすことで、事前の予防策や復旧について学ぶことが目的のサービス
カオスエンジニアリングというらしい
これを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アラームを設定など汎用性も高いので、具体的なテストプランを構築して負荷/障害試験を行うなど色々と楽しめそう

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
What you can do with signing up
0