Cross-AZ: Traffic Slowdown - AWS フォールトインジェクションサービス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Cross-AZ: Traffic Slowdown

Cross-AZ: Traffic Slowdown シナリオを使用して、パケット損失を挿入し、アベイラビリティーゾーン (AZs) 間のトラフィックを中断および減速できます。パケット損失は、グレー障害と呼ばれる部分的な中断であるクロス AZ 通信を損ないます。ターゲットリソース間のネットワークフローにパケット損失を注入します。ネットワークフローは、コンピューティングリソース間のトラフィックを表します。サーバー、コンテナ、サービス間のリクエスト、レスポンス、その他の通信を伝送するデータパケットです。このシナリオは、オブザーバビリティの設定の検証、アラームのしきい値の調整、AZ 間の通信におけるアプリケーションの機密性と依存関係の検出、AZ 退避などの重要な運用上の意思決定の実践に役立ちます。

デフォルトでは、シナリオは 30 分間、選択した AZ からのターゲットリソースのアウトバウンドネットワークフローの 100% に 15% のパケット損失を挿入します。AWS FIS コンソールの共有パラメータの編集ダイアログを使用して、シナリオレベルで以下のパラメータを調整し、基盤となるアクションに適用できます。

  • アベイラビリティーゾーン - 中断する AZ を選択できます。パケット損失は、その AZ からリージョン内の他の AZs に挿入されます。

  • パケット損失 - パケット損失を 5% 以上の微妙な中断テスト用に低く調整し、50% などの重大な通信低下と復旧メカニズムをテストします。さらに、接続全体に影響が及ぶ場合は 100% まで調整します。

  • フローの割合 - トラフィックのサブセットを損なうように減らします。たとえば、ネットワークフローの 25% に影響を与える 15% のパケット損失を挿入して、さらに微妙なテストを行うことができます。

  • Duration - 実験の実行時間を設定します。を短縮してテストを高速化したり、長時間持続テストを実行したりできます。たとえば、障害が発生した条件下で復旧メカニズムをテストできるように、期間を 2 時間に設定します。

  • リソースターゲティング - タグ (EC2 インスタンスまたは EC2 または Fargate の ECS タスクの場合) またはラベル (EC2 の EKS ポッドの場合) を使用して、シナリオ全体のターゲットリソースを定義できますEC2。独自のタグとラベルを指定することも、シナリオで提供されるデフォルトを使用することもできます。タグやラベルを使用しない場合は、他のパラメータを指定して アクションを編集してリソースをターゲットにできます。

  • カスタマイズ - EC2 または ECS リソースをターゲットにしない場合は、アクションをデフォルトのタグのままにできます。実験では、ターゲットとするリソースが見つからず、アクションはスキップされます。ただし、EKS リソースをターゲットにしない場合は、EKS クラスター識別子を指定する必要があるため、シナリオから EKS アクションとターゲットを完全に削除する必要があります。さらに詳細なカスタマイズのために、実験テンプレートで個々のアクションを直接変更できます。

アクション

次のアクションは、ターゲット AZs からネットワークレイヤーのリージョン AZs 内の他の AZ へのアウトバウンド通信にパケット損失を導入することで、AZ 間のトラフィックの速度低下の症状を作成するのに役立ちます。これらのアクションは並行して実行され、それぞれがデフォルトで 30 分間 15% のパケット損失を挿入します。この期間を過ぎると、通信は通常に戻ります。シナリオを実行するには、選択した AZ に EC2 インスタンス、ECS タスク、または EKS ポッドのいずれかのリソースタイプが必要です。

ECS ネットワークパケット損失

クロス AZ: トラフィックスローダウンには、ECS タスクのパケット損失を挿入するための aws:ecs:task-network-packet-loss が含まれます。アクションは、選択した AZ 内のタスクをターゲットとし、リージョン内の他のすべての AZs。アクションを編集し、AZs を Sourcesフィールドに追加または削除することで、影響の範囲をさらにカスタマイズできます。デフォルトでは、 の値を持つ という名前のタグCrossAZTrafficSlowdownを持つタスクをターゲットにしていますPacketLossForECS。デフォルトのタグを独自のタグに置き換えるか、タスクにシナリオタグを追加できます。有効なタスクが見つからない場合、このアクションはスキップされます。ECS で実験を実行する前に、ECS タスクアクションの設定手順に従う必要があります。

EKS ネットワークパケット損失

クロス AZ: トラフィックスローダウンには、EKS ポッドのパケット損失を挿入するための aws:eks:pod-network-packet-loss が含まれます。アクションは、選択した AZ 内のポッドをターゲットとし、リージョン内の他のすべての AZs へのアウトバウンド通信を損ないます。アクションを編集し、AZs を Sourcesフィールドに追加または削除することで、影響の範囲をさらにカスタマイズできます。デフォルトでは、key=value 形式のラベルを持つクラスター内のポッドをターゲットにします。デフォルトのラベルは ですCrossAZTraffic=PacketLossForEKS。デフォルトラベルを独自のラベルに置き換えるか、このラベルをポッドに追加できます。有効なポッドが見つからない場合、このアクションはスキップされます。EKS で実験を実行する前に、EKS ポッドアクションのセットアップ手順に従う必要があります。

EC2 ネットワークパケット損失

クロス AZ: Traffic Slowdown は、aws:ssm:send-command アクションを使用して AWSFIS-Run-Network-Packet-Loss-Sources ドキュメントを実行し、EC2 インスタンスのパケット損失を挿入し、リージョン内の他のすべての AZs へのアウトバウンド通信を妨げます。アクションを編集し、AZs を Sourcesフィールドに追加または削除することで、影響の範囲をさらにカスタマイズできます。アクションは、選択した AZ のインスタンスをターゲットにします。デフォルトでは、値が の という名前のタグCrossAZTrafficSlowdownを持つインスタンスをターゲットにしていますPacketLossForEC2。デフォルトのタグを独自のタグに置き換えるか、このタグをインスタンスに追加できます。有効なインスタンスが見つからない場合、このアクションはスキップされます。SSM を使用して EC2 で実験を実行する前に、AWS Systems Manager エージェントを設定する必要があります。

制限

  • このシナリオに停止条件は含まれていません。アプリケーションに適した停止条件を実験テンプレートに追加する必要があります。

要件

  • AWS FIS 実験ロールに必要なアクセス許可を追加します。

  • 選択した AZ 内の EC2 インスタンス、ECS タスク、または EKS ポッドの 3 つのタイプのいずれかから 1 つ以上のリソースをターゲットにする必要があります。

  • シナリオのすべてのターゲットは、同じ VPC 内にある必要があります。

権限

このシナリオを実行するには、FIS が実験でターゲットとするリソースタイプのロールと管理ポリシー、EC2、ECS、EKS を引き受けることを許可する信頼ポリシーを持つ IAM ロールが必要です。Cross-AZ: Traffic Slowdown シナリオから実験テンプレートを作成すると、FIS は信頼ポリシーと次の AWS 管理ポリシーを使用してロールを作成します。

既存の IAM ロールを使用して Cross-AZ: Traffic Slowdown シナリオを実行している場合は、次のポリシーをアタッチして AWS FIS に必要なアクセス許可を付与できます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeTasks", "Effect": "Allow", "Action": "ecs:DescribeTasks", "Resource": "*" }, { "Sid": "DescribeContainerInstances", "Effect": "Allow", "Action": "ecs:DescribeContainerInstances", "Resource": "arn:aws:ecs:*:*:container-instance/*/*" }, { "Sid": "DescribeInstances", "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Sid": "DescribeSubnets", "Effect": "Allow", "Action": "ec2:DescribeSubnets", "Resource": "*" }, { "Sid": "DescribeCluster", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:*:*:cluster/*" }, { "Sid": "TargetResolutionByTags", "Effect": "Allow", "Action": "tag:GetResources", "Resource": "*" }, { "Sid": "SendCommand", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:managed-instance/*", "arn:aws:ssm:*:*:document/*" ] }, { "Sid": "ListCommands", "Effect": "Allow", "Action": [ "ssm:ListCommands" ], "Resource": "*" }, { "Sid": "CancelCommand", "Effect": "Allow", "Action": [ "ssm:CancelCommand" ], "Resource": "*" } ] }

シナリオのコンテンツ

次のコンテンツはシナリオを定義しています。この JSON を保存し、AWS コマンドラインインターフェイス (AWS CLI) から create-experiment-template コマンドを使用して実験テンプレートを作成するのに使用できます。シナリオの最新バージョンについては、FIS コンソールのシナリオライブラリにアクセスし、コンテンツタブに移動します。

{ "tags": { "Name": "Cross-AZ: Traffic Slowdown" }, "description": "Inject packet loss to disrupt and slow down traffic between AZs.", "actions": { "PacketLossForEC2": { "actionId": "aws:ssm:send-command", "parameters": { "duration": "PT30M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Packet-Loss-Sources", "documentParameters": "{\"Sources\":\"us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f\",\"LossPercent\":\"15\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}" }, "targets": { "Instances": "TargetsForEC2" } }, "PacketLossForECS": { "actionId": "aws:ecs:task-network-packet-loss", "parameters": { "sources": "us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f", "lossPercent": "15", "duration": "PT30M", "flowsPercent": "100", "installDependencies": "true", "useEcsFaultInjectionEndpoints": "true" }, "targets": { "Tasks": "TargetsForECS" } }, "PacketLossForEKS": { "actionId": "aws:eks:pod-network-packet-loss", "parameters": { "sources": "us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f", "lossPercent": "15", "duration": "PT30M", "flowsPercent": "100", "interface": "DEFAULT", "kubernetesServiceAccount": "fis-service-account" }, "targets": { "Pods": "TargetsForEKS" } } }, "targets": { "TargetsForEC2": { "filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "CrossAZTrafficSlowdown": "PacketLossForEC2" }, "resourceType": "aws:ec2:instance", "selectionMode": "ALL" }, "TargetsForECS": { "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "CrossAZTrafficSlowdown": "PacketLossForECS" }, "resourceType": "aws:ecs:task", "selectionMode": "ALL" }, "TargetsForEKS": { "parameters": { "availabilityZoneIdentifier": "us-east-1a", "clusterIdentifier": "", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "CrossAZTrafficSlowdown=PacketLossForEKS" }, "resourceType": "aws:eks:pod", "selectionMode": "ALL" } }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "stopConditions": [ { "source": "none" } ] }