継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS Fault Injection Service で部分的な障害テストケースがサポートされたので触ってみたメモ✍

タダです.

AWS Fault Injection Service(以降 FIS)で部分的な障害テストシナリオがサポートされたというアナウンスがありました.実際に遭遇する障害シナリオとしてこういう部分的な障害は多く経験したことがあるため,試してみます.

aws.amazon.com

アップデート概要

FIS に新シナリオが 2 つ追加されました.

  • AZ: Application Slowdown : 単一 AZ 内の EC2 / ECS / EKS リソース間に対してネットワークレイテンシや中断を注入し,その AZ だけ遅延・スループット低下が発生している状況を再現できるシナリオ
  • Cross-AZ: Traffic Slowdown : AZ 間のトラフィックにパケットロスや遅延を発生させ,マルチ AZ 構成アプリケーションの AZ 間通信が劣化した状態を再現できるシナリオ

これらのシナリオは,FIS のシナリオライブラリとして AWS があらかじめ用意している実験テンプレートで提供されます.

docs.aws.amazon.com

docs.aws.amazon.com

これまでも FIS には AZ Availability: Power Interruption という1 AZ 全体が停電したような状態を再現するシナリオが存在しましたが,今回のアップデートで部分的な障害がサポートされました.

docs.aws.amazon.com

実際のテストシナリオを試す

ここからは実際に簡単な検証環境を作り AZ: Application Slowdown を試してみます.

検証環境

シンプルな構成にして,単一 AZ 内の EC2 をネットワーク速度を遅くするシナリオを試してみます.

  • リージョン: us-east-1
  • Public Subnet: 2 つ(異なる AZ で us-east-1a / 1b)
  • EC2: 2 台(各 AZ に 1 台ずつ配置)
    • Amazon Linux 2023
    • HTTP サーバ を起動
    • 共通タグ app = fis-demo
  • IAM:
    • EC2 に AmazonSSMManagedInstanceCore を付与

検証のシナリオ

FIS の template は以下の設定でつくりました.us-east-1b のネットワーク速度が落ちるように設定しました.使用しているのが SSM Document の AWSFIS-Run-Network-Latency-Sourcestc を使用してレイテンシーとジッタを追加しています.

❯ aws fis get-experiment-template --id EXPEKPD4w6UU79Tm6a --region us-east-1
{
    "experimentTemplate": {
        "id": "EXTFHLhsHdPdHuNgQ",
        "arn": "arn:aws:fis:us-east-1:[AWS Account Number]:experiment-template/EXPEKPD4w6UU79Tm6a",
        "description": "Add latency between resources within a single AZ",
        "targets": {
            "TargetsForEC2": {
                "resourceType": "aws:ec2:instance",
                "resourceTags": {
                    "app": "fis-demo"
                },
                "filters": [
                    {
                        "path": "Placement.AvailabilityZone",
                        "values": [
                            "us-east-1b"
                        ]
                    }
                ],
                "selectionMode": "ALL"
            }
        },
        "actions": {
            "LatencyForEC2": {
                "actionId": "aws:ssm:send-command",
                "parameters": {
                    "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources",
                    "documentParameters": "{\"DelayMilliseconds\":\"5000\",\"Sources\":\"us-east-1b\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"ingress\",\"DurationSeconds\":\"300\",\"FlowsPercent\":\">
                    "duration": "PT5M"
                },
                "targets": {
                    "Instances": "TargetsForEC2"
                }
            }
        },
        "stopConditions": [
            {
                "source": "none"
            }
        ],
        "creationTime": "2025-11-16T08:02:05.361000+09:00",
        "lastUpdateTime": "2025-11-16T08:35:13.708000+09:00",
        "roleArn": "arn:aws:iam::[AWS Account Number]:role/service-role/AWSFISIAMRole-1763247565194",
        "tags": {
            "Name": "Application Slowdown test"
        },
        "experimentOptions": {
            "accountTargeting": "single-account",
            "emptyTargetResolutionMode": "skip"
        }
    }
}

関連情報

docs.aws.amazon.com

検証を試してみる

作った AZ: Application Slowdown のシナリオを試してみます.

❯ aws fis start-experiment --experiment-template-id EXTFHLhsHdPdHuNgQ --region us-east-1
{
    "experiment": {
        "id": "EXPEKPD4w6UU79Tm6a",
        "arn": "arn:aws:fis:us-east-1:[AWS Account Number]:experiment/EXPEKPD4w6UU79Tm6a",
        "experimentTemplateId": "EXTFHLhsHdPdHuNgQ",
        "roleArn": "arn:aws:iam::[AWS Account Number]:role/service-role/AWSFISIAMRole-1763247565194",
        "state": {
            "status": "initiating",
            "reason": "Experiment is initiating."
        },
        "targets": {
            "TargetsForEC2": {
                "resourceType": "aws:ec2:instance",
                "resourceTags": {
                    "app": "fis-demo"
                },
                "filters": [
                    {
                        "path": "Placement.AvailabilityZone",
                        "values": [
                            "us-east-1b"
                        ]
                    }
                ],
                "selectionMode": "ALL"
            }
        },
        "actions": {
            "LatencyForEC2": {
                "actionId": "aws:ssm:send-command",
                "parameters": {
                    "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources",
                    "documentParameters": "{\"DelayMilliseconds\":\"5000\",\"Sources\":\"us-east-1b\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"ingress\",\"DurationSeconds\":\"300\",\"FlowsPercent\":\">
                    "duration": "PT5M"
                },
                "targets": {
                    "Instances": "TargetsForEC2"
                },
                "state": {
                    "status": "pending",
                    "reason": "Initial state"
                }
            }
        },
        "stopConditions": [
            {
                "source": "none"
            }
        ],
        "creationTime": "2025-11-16T19:18:06.046000+09:00",
        "startTime": "2025-11-16T19:18:06.330000+09:00",
        "tags": {},
        "experimentOptions": {
            "accountTargeting": "single-account",
            "emptyTargetResolutionMode": "skip",
            "actionsMode": "run-all"
        }
    }
}

シナリオの実行が成功しました.

関連情報

docs.aws.amazon.com

まとめ

FIS に追加された部分的な障害シナリオを単一 AZ のものを試してみました.