

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Cross-AZ: Traffic Slowdown
<a name="cross-az-traffic-slowdown-scenario"></a>

 您可以使用跨可用區域：流量緩慢方案來注入封包遺失，以中斷和減慢可用區域 (AZs) 之間的流量。封包遺失會影響跨可用區通訊、部分中斷，有時稱為灰色故障。它會在目標資源之間的網路流程上注入封包遺失。網路流程代表運算資源之間的流量 — 承載請求、回應的資料封包，以及伺服器、容器和服務之間的其他通訊。此案例有助於驗證可觀測性設定、調整警示閾值、在跨可用區域通訊中探索應用程式敏感度和相依性，以及練習 AZ 疏散等關鍵操作決策。

 根據預設，案例會將 15% 封包遺失注入 100% 來自所選 AZ 之目標資源的傳出網路流程，持續時間為 30 分鐘。您可以使用 AWS FIS 主控台中的**編輯共用參數**對話方塊，在案例層級調整下列參數，然後套用至基礎動作：
+  可用區域 - 您可以選擇要影響的可用區域，而封包遺失會從該可用區域注入該區域內的其他AZs。
+  封包遺失 - 將封包遺失降低以進行細微的中斷測試，例如 5% 或更高，以測試嚴重的通訊降級和復原機制，例如 50%，或甚至 100% 的總連線影響。
+  流程百分比 - 減少以損害一部分的流量。例如，您可以注入 15% 的封包遺失，影響 25% 的網路流程，以進行更細微的測試。
+  持續時間 - 設定實驗執行的時間長度。您可以縮短 以進行更快的測試，或執行更長的持續測試。例如，將持續時間設定為 2 小時，以協助在受損條件下測試復原機制。
+  資源目標 - 您可以使用標籤 （適用於 EC2 執行個體或 EC2 或 Fargate 上的 ECS 任務） 或標籤 （適用於 EC2 上的 EKS Pod)，為整體案例定義目標資源。您可以指定自己的標籤和標籤，或使用案例中提供的預設值。如果您不想使用標籤或標籤，您可以透過指定其他參數，將動作編輯為目標資源。
+  自訂 - 如果您不想將 EC2 或 ECS 資源設為目標，則可以保留具有預設標籤的動作。實驗不會找到任何要鎖定的資源，而且會略過動作。不過，如果您不想將 EKS 資源設為目標，您應該從案例中完全移除 EKS 動作和目標，因為它需要提供 EKS 叢集識別符。如需更精細的自訂，您可以直接修改實驗範本中的個別動作。

## 動作
<a name="cross-az-traffic-slowdown-scenario-actions"></a>

 以下動作結合起來，透過將來自目標 AZs 的傳出通訊封包遺失引入網路層區域中的其他 AZs，協助在 AZ 之間建立流量變慢的症狀。這些動作會平行執行，每個動作預設會注入 15% 封包遺失 30 分鐘。在此期間之後，通訊會恢復正常。此案例在選取的 AZ 中至少需要下列其中一個資源類型才能執行：EC2 執行個體、ECS 任務或 EKS Pod。

### ECS 網路封包遺失
<a name="cross-az-traffic-slowdown-scenario-actions-ecs-network-packet-loss"></a>

 跨可用區域：流量緩慢包括 [aws：ecs：task-network-packet-loss](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#task-network-packet-loss)，以注入 ECS 任務的封包遺失。動作以所選 AZ 中的任務為目標，並損害其與區域中所有其他 AZs的傳出通訊。您可以透過編輯動作並從 `Sources` 欄位新增或移除 AZs進一步自訂影響的範圍。根據預設，它會以標籤[https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)名為 `CrossAZTrafficSlowdown` 且值為 的任務為目標`PacketLossForECS`。您可以使用自己的標籤取代預設標籤，或將案例標籤新增至任務。如果找不到有效的任務，則會略過此動作。在 ECS 上執行實驗之前，您應該遵循 [ECS 任務動作的設定步驟](https://docs.aws.amazon.com/fis/latest/userguide/ecs-task-actions.html)。

### EKS 網路封包遺失
<a name="cross-az-traffic-slowdown-scenario-actions-eks-network-packet-loss"></a>

 跨可用區：流量緩慢包括 [aws：eks：pod-network-packet-loss](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-packet-loss)，以注入 EKS Pod 的封包遺失。動作以所選 AZ 中的 Pod 為目標，並影響其與區域中所有其他 AZs傳出通訊。您可以透過編輯動作並從 `Sources` 欄位新增或移除 AZs進一步自訂影響的範圍。根據預設，它會以具有格式 key=value 標籤的叢集內的 Pod 為目標。提供的預設標籤為 `CrossAZTraffic=PacketLossForEKS`。您可以使用自己的標籤取代預設標籤，或將此標籤新增至 Pod。如果找不到有效的 Pod，則會略過此動作。在 EKS 上執行實驗之前，您應該遵循 [EKS Pod 動作的設定步驟](https://docs.aws.amazon.com/fis/latest/userguide/eks-pod-actions.html)。

### EC2 網路封包遺失
<a name="cross-az-traffic-slowdown-scenario-actions-ec2-network-packet-loss"></a>

 跨可用區：Traffic Slowdown 使用 [aws：ssm：send-mand](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#ssm-send-command) 動作來執行 [AWSFIS-Run-Network-Packet-Loss-Sources](https://docs.aws.amazon.com/fis/latest/userguide/actions-ssm-agent.html#awsfis-run-network-packet-loss-sources) 文件，以注入 EC2 執行個體的封包遺失，並損害其與區域中所有其他AZs傳出通訊。您可以透過編輯動作並從 `Sources` 欄位新增或移除 AZs進一步自訂影響的範圍。動作以所選 AZ 中的執行個體為目標。根據預設，它會以標籤[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)名為 `CrossAZTrafficSlowdown` 且值為 的執行個體為目標`PacketLossForEC2`。您可以使用自己的標籤取代預設標籤，或將此標籤新增至執行個體。如果找不到有效的執行個體，則會略過此動作。在使用 SSM 在 EC2 上執行實驗之前，您應該[設定 AWS Systems Manager 代理程式](https://docs.aws.amazon.com/fis/latest/userguide/actions-ssm-agent.html)。

## 限制
<a name="cross-az-traffic-slowdown-scenario-limitations"></a>
+  此案例不包含[停止條件](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions.html)。應用程式正確的停止條件應新增至實驗範本。

## 要求
<a name="cross-az-traffic-slowdown-scenario-requirements"></a>
+  將必要的許可新增至 AWS FIS [實驗角色](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role.html)。
+  您需要將下列 3 種類型中的任何一種資源設為目標：EC2 執行個體、ECS 任務或 EKS Pod。
+  案例的所有目標都必須位於相同的 VPC 中。

## 許可
<a name="cross-az-traffic-slowdown-scenario-permissions"></a>

 若要執行此案例，您需要具有信任政策的 IAM 角色，允許 FIS 針對您在實驗中目標的資源類型擔任角色和受管政策：EC2、ECS 和 EKS。當您從跨可用區：流量緩慢案例建立實驗範本時，FIS 會使用信任政策和下列 AWS 受管政策為您建立 角色：
+  [AWSFaultInjectionSimulatorEC2Access](https://docs.aws.amazon.com/fis/latest/userguide/security-iam-awsmanpol.html#AWSFaultInjectionSimulatorEC2Access) 
+  [AWSFaultInjectionSimulatorECSAccess](https://docs.aws.amazon.com/fis/latest/userguide/security-iam-awsmanpol.html#AWSFaultInjectionSimulatorECSAccess) 
+  [AWSFaultInjectionSimulatorEKSAccess](https://docs.aws.amazon.com/fis/latest/userguide/security-iam-awsmanpol.html#AWSFaultInjectionSimulatorEKSAccess) 

 如果您使用現有的 [IAM 角色](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role.html)來執行跨可用區：流量緩慢案例，您可以連接下列政策來授予 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": "*"
        }
    ]
}
```

## 案例內容
<a name="cross-az-traffic-slowdown-scenario-content"></a>

 下列內容定義了案例。此 JSON 可用來儲存，並使用 AWS 命令列界面 (AWS CLI) 中的 [create-experiment-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/fis/create-experiment-template.html) 命令來建立[實驗範本](https://docs.aws.amazon.com/fis/latest/userguide/experiment-templates.html)。如需最新版本的案例，請造訪 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"
        }
    ]
}
```