

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

# AZ: Application Slowdown
<a name="az-application-slowdown-scenario"></a>

 您可以使用 AZ：Application Slowdown 案例，在單一可用區域 (AZ) 內的資源之間引入額外的延遲。此延遲會產生應用程式變慢的許多症狀，這是一種部分中斷，有時稱為灰色故障。它會為目標資源之間的網路流程增加延遲。網路流程代表運算資源之間的流量 — 承載請求、回應的資料封包，以及伺服器、容器和服務之間的其他通訊。此案例有助於驗證可觀測性設定、調整警示閾值、探索應用程式對變慢的敏感度，以及練習 AZ 疏散等關鍵操作決策。

 根據預設，此案例會將 200 毫秒的延遲新增至所選可用區域內目標資源之間的 100% 網路流程，持續時間為 30 分鐘。您可以使用 AWS FIS 主控台中的**編輯共用參數**對話方塊，在案例層級調整下列參數，然後套用至基礎動作：
+  可用區域 - 您可以選取要在案例中影響的可用區域。
+  毫秒 (ms) 的延遲 - 根據應用程式的敏感度和需求進行調整。例如，您可以為更敏感的應用程式設定較低的延遲，或設定更高的延遲來測試逾時處理。請考慮使用目前應用程式延遲的倍數做為基準。
+  流程百分比 - 減少以損害一部分的流量。例如，您可以新增 200 毫秒延遲，影響 25% 的網路流程，以進行更細微的測試。
+  持續時間 - 設定實驗執行的時間長度。您可以縮短 以進行更快的測試，或執行更長的持續測試。例如，將持續時間設定為 2 小時，以在條件受損的情況下測試您的復原機制。
+  資源目標 - 您可以使用標籤 （適用於 EC2 執行個體或 EC2 或 Fargate 上的 ECS 任務） 或標籤 （適用於 EC2 上的 EKS Pod)，為整體案例定義目標資源。您可以指定自己的標籤和標籤，或使用案例中提供的預設值。如果您不想使用標籤或標籤，您可以透過指定其他參數，將動作編輯為目標資源。
+  自訂 - 如果您不想將 EC2 或 ECS 資源設為目標，則可以保留具有預設標籤的動作。實驗不會找到任何要鎖定的資源，而且會略過動作。不過，如果您不想將 EKS 資源設為目標，您應該從案例中完全移除 EKS 動作和目標，因為它需要提供 EKS 叢集識別符。如需更精細的自訂，您可以直接修改實驗範本中的個別動作。

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

 以下動作透過在網路流程中引入額外的延遲，然後透過應用程式傳播，共同協助在單一 AZ 中建立應用程式變慢的許多症狀。這些動作會平行執行，每個動作預設會新增 200 毫秒延遲 30 分鐘。在此期間之後，延遲會回到正常層級。此案例至少需要下列其中一種資源類型才能執行：EC2 執行個體、ECS 任務或 EKS Pod。

### ECS 網路延遲
<a name="az-application-slowdown-scenario-actions-ecs-network-latency"></a>

 AZ：Application Slowdown 包含 [aws：ecs：task-network-latency](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#task-network-latency)，以引入 ECS 任務的延遲。動作以所選 AZ 中的任務為目標。根據預設，它會以標籤[https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-using-tags.html)名為 `AZApplicationSlowdown` 且值為 的任務為目標`LatencyForECS`。您可以使用自己的標籤取代預設標籤，或將案例標籤新增至任務。如果找不到有效的任務，則會略過此動作。在 ECS 上執行實驗之前，您應該遵循 [ECS 任務動作的設定步驟](https://docs.aws.amazon.com/fis/latest/userguide/ecs-task-actions.html)。

### EKS 網路延遲
<a name="az-application-slowdown-scenario-actions-eks-network-latency"></a>

 AZ：Application Slowdown 包含 [aws：eks：pod-network-latency](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-latency)，以引入 EKS Pod 的延遲。動作以所選 AZ 中的 Pod 為目標。根據預設，它會以具有格式 key=value 標籤的叢集內的 Pod 為目標。提供的預設標籤為 `AZApplicationSlowdown=LatencyForEKS`。您可以使用自己的標籤取代預設標籤，或將此標籤新增至 Pod。如果找不到有效的 Pod，則會略過此動作。在 EKS 上執行實驗之前，您應該遵循 [EKS Pod 動作的設定步驟](https://docs.aws.amazon.com/fis/latest/userguide/eks-pod-actions.html)。

### EC2 網路延遲
<a name="az-application-slowdown-scenario-actions-ec2-network-latency"></a>

 AZ：Application Slowdown 使用 [aws：ssm：send-mand](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#ssm-send-command) 動作來執行 [AWSFIS-Run-Network-Latency-Sources](https://docs.aws.amazon.com/fis/latest/userguide/actions-ssm-agent.html#awsfis-run-network-latency-sources) 文件，以引入 EC2 執行個體的延遲。動作以所選 AZ 中的執行個體為目標。根據預設，它會以標籤[https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)名為 `AZApplicationSlowdown` 且值為 的執行個體為目標`LatencyForEC2`。您可以使用自己的標籤取代預設標籤，或將此標籤新增至執行個體。如果找不到有效的執行個體，則會略過此動作。在使用 SSM 在 EC2 上執行實驗之前，您應該[設定 AWS Systems Manager 代理程式](https://docs.aws.amazon.com/fis/latest/userguide/actions-ssm-agent.html)。

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

## 要求
<a name="az-application-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="az-application-slowdown-scenario-permissions"></a>

 若要執行此案例，您需要具有信任政策的 IAM 角色，允許 FIS 針對您在實驗中目標的資源類型擔任角色和受管政策：EC2、ECS 和 EKS。當您從 AZ：Application Slowdown 案例建立實驗範本時，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)來執行 AZ：Application 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": "*"
        }
    ]
}
```

## 案例內容
<a name="az-application-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": "AZ: Application Slowdown"
    },
    "description": "Add latency between resources within a single AZ.",
    "actions": {
        "LatencyForEKS": {
            "actionId": "aws:eks:pod-network-latency",
            "parameters": {
                "delayMilliseconds": "200",
                "duration": "PT30M",
                "flowsPercent": "100",
                "interface": "DEFAULT",
                "kubernetesServiceAccount": "fis-service-account",
                "sources": "us-east-1a"
            },
            "targets": {
                "Pods": "TargetsForEKS"
            }
        },
        "LatencyForEC2": {
            "actionId": "aws:ssm:send-command",
            "parameters": {
                "duration": "PT30M",
                "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources",
                "documentParameters": "{\"DelayMilliseconds\":\"200\",\"Sources\":\"us-east-1a\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}"
            },
            "targets": {
                "Instances": "TargetsForEC2"
            }
        },
        "LatencyForECS": {
            "actionId": "aws:ecs:task-network-latency",
            "parameters": {
                "delayMilliseconds": "200",
                "duration": "PT30M",
                "flowsPercent": "100",
                "installDependencies": "true",
                "sources": "us-east-1a",
                "useEcsFaultInjectionEndpoints": "true"
            },
            "targets": {
                "Tasks": "TargetsForECS"
            },
            "startAfter": []
        }
    },
    "targets": {
        "TargetsForEKS": {
            "parameters": {
                "availabilityZoneIdentifier": "us-east-1a",
                "clusterIdentifier": "",
                "namespace": "default",
                "selectorType": "labelSelector",
                "selectorValue": "AZApplicationSlowdown=LatencyForEKS"
            },
            "resourceType": "aws:eks:pod",
            "selectionMode": "ALL"
        },
        "TargetsForEC2": {
            "filters": [
                {
                    "path": "Placement.AvailabilityZone",
                    "values": [
                        "us-east-1a"
                    ]
                }
            ],
            "resourceTags": {
                "AZApplicationSlowdown": "LatencyForEC2"
            },
            "resourceType": "aws:ec2:instance",
            "selectionMode": "ALL"
        },
        "TargetsForECS": {
            "filters": [
                {
                    "path": "AvailabilityZone",
                    "values": [
                        "us-east-1a"
                    ]
                }
            ],
            "resourceTags": {
                "AZApplicationSlowdown": "LatencyForECS"
            },
            "resourceType": "aws:ecs:task",
            "selectionMode": "ALL"
        }
    },
    "experimentOptions": {
        "accountTargeting": "single-account",
        "emptyTargetResolutionMode": "skip"
    },
    "stopConditions": [
        {
            "source": "none"
        }
    ]
}
```