

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

# AZ Availability: Power Interruption
<a name="az-availability-scenario"></a>

 您可以使用 AZ Availability: Power Interruption案例來引發可用區域 (AZ) 中電源完全中斷的預期症狀。

此案例可用來示範多可用區域應用程式在單一完整可用區域電源中斷期間如預期般運作。它包括區域運算遺失 (Amazon EC2、EKS 和 ECS)、可用區域中運算沒有重新擴展、子網路連線遺失、RDS 容錯移轉、ElastiCache 容錯移轉、對 S3 Express One Zone 目錄儲存貯體的存取受損，以及 EBS 磁碟區沒有回應。預設會略過找不到目標的動作。

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

下列動作共同在單一可用區中產生完整電源中斷的許多預期症狀。可用區域可用性：電源中斷只會影響預期會在單一可用區域電源中斷期間看到影響的服務。根據預設，案例會注入電源中斷症狀 30 分鐘，然後額外注入復原期間可能發生的症狀 30 分鐘。

### Stop-Instances
<a name="az-availability-scenario-actions-stop-instances"></a>

在 AZ 電源中斷期間，受影響 AZ 中的 EC2 執行個體將會關閉。電源還原後，執行個體將重新啟動。 AZ Availability: Power Interruption包含 [aws：ec2：stop-instances](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#stop-instances)，以在中斷期間停止受影響 AZ 中的所有執行個體。持續時間過後，執行個體會重新啟動。停止由 Amazon EKS 管理的 EC2 執行個體會導致刪除相依的 EKS Pod。停止由 Amazon ECS 管理的 EC2 執行個體會導致相依 ECS 任務停止。

此動作以受影響 AZ 中執行的 EC2 執行個體為目標。根據預設，它會以標籤名為 `AzImpairmentPower` 且值為 的執行個體為目標`StopInstances`。您可以在實驗範本中將此標籤新增至執行個體，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的執行個體，則會略過此動作。

### Stop-ASG-Instances
<a name="az-availability-scenario-actions-stop-asg-instances"></a>

在 AZ 電源中斷期間，由受影響 AZ 中的 Auto Scaling 群組管理的 EC2 執行個體將會關閉。電源還原後，執行個體將重新啟動。 AZ Availability: Power Interruption包含 [aws：ec2：stop-instances](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#stop-instances)，以在中斷期間停止所有執行個體，包括 Auto Scaling 管理的執行個體。持續時間過後，執行個體會重新啟動。

此動作以受影響 AZ 中執行的 EC2 執行個體為目標。根據預設，它會以標籤名為 `AzImpairmentPower`且值為 的執行個體為目標`IceAsg`。您可以在實驗範本中將此標籤新增至執行個體，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的執行個體，則會略過此動作。

### 暫停執行個體啟動
<a name="az-availability-scenario-actions-pause-instance-launches"></a>

在 AZ 電源中斷期間，在 AZ 中佈建容量的 EC2 API 呼叫將會失敗。特別是，下列 APIs 會受到影響：`ec2:StartInstances`、 `ec2:CreateFleet`和 `ec2:RunInstances`。 AZ Availability: Power Interruption includes包含 [aws：ec2：api-insufficient-instance-capacity-error](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#api-ice)，以防止在受影響的 AZ 中佈建新的執行個體。

此動作以用來佈建執行個體的 IAM 角色為目標。這些必須使用 ARN 作為目標。根據預設，如果找不到有效的 IAM 角色，則會略過此動作。

### 暫停 ASG Scaling
<a name="az-availability-scenario-actions-pause-asg-scaling"></a>

 在 AZ 電源中斷期間，Auto Scaling 控制平面發出的 EC2 API 呼叫會失敗，以復原 AZ 中遺失的容量。特別是，下列 APIs 會受到影響：`ec2:StartInstances`、 `ec2:CreateFleet`和 `ec2:RunInstances`。 AZ Availability: Power Interruption包含 [aws：ec2：asg-insufficient-instance-capacity-error](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#asg-ice)，以防止在受影響的可用區域中佈建新的執行個體。這也可防止 Amazon EKS 和 Amazon ECS 在受影響的 AZ 中擴展。

此動作以 Auto Scaling 群組為目標。根據預設，它會以標籤名為 且值`AzImpairmentPower`為 的 Auto Scaling 群組為目標`IceAsg`。您可以在實驗範本中將此標籤新增至 Auto Scaling 群組，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的 Auto Scaling 群組，則會略過此動作。

### 暫停網路連線
<a name="az-availability-scenario-actions-pause-network-connectivity"></a>

在 AZ 電源中斷期間，AZ 中的網路將無法使用。發生這種情況時，某些 AWS 服務可能需要幾分鐘的時間來更新 DNS，以反映受影響 AZ 中的私有端點無法使用。在此期間，DNS 查詢可能會傳回無法存取的 IP 地址。 AZ Availability: Power Interruption包含 [aws：network：disrupt-connectivity](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#network-actions-reference)，以封鎖受影響 AZ 中所有子網路的所有網路連線 2 分鐘。這將強制大多數應用程式逾時和 DNS 重新整理。在 2 分鐘後結束動作可允許區域服務 DNS 的後續復原，同時 AZ 仍然無法使用。

此動作以子網路為目標。根據預設，它會以標籤名為 `AzImpairmentPower`且值為 的叢集為目標`DisruptSubnet`。您可以在實驗範本中將此標籤新增至子網路，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的子網路，則會略過此動作。

### 容錯移轉 RDS
<a name="az-availability-scenario-actions-failover-rds"></a>

在 AZ 電源中斷期間，受影響 AZ 中的 RDS 節點將會關閉。受影響 AZ 中的單一 AZ RDS 節點將完全無法使用。對於多可用區域叢集，寫入器節點將容錯移轉至不受影響的可用區域，且受影響的可用區域中的讀取器節點將無法使用。對於多可用區域叢集，如果寫入器位於受影響的可用區域， 會將 [aws：rds：failover-db-cluster](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#failover-db-cluster) AZ Availability: Power Interruption納入容錯移轉。

此動作以 RDS 叢集為目標。根據預設，它會以標籤名為 `AzImpairmentPower`且值為 的叢集為目標`DisruptRds`。您可以在實驗範本中將此標籤新增至叢集，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的叢集，則會略過此動作。

### 暫停 ElastiCache 複寫群組
<a name="az-availability-scenario-actions-pause-elasticache"></a>

在 AZ 電源中斷期間，AZ 中的 ElastiCache 節點無法使用。 AZ Availability: Power Interruption包含 [aws：elasticache：replicationgroup-interrupt-az-power](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#interrupt-elasticache)，以終止受影響 AZ 中的 ElastiCache 節點。在中斷期間，不會在受影響的 AZ 中佈建新的執行個體，因此複寫群組將維持在較低的容量。

此動作以 ElastiCache 複寫群組為目標。根據預設，它會以名為 標籤的複寫群組為目標`AzImpairmentPower`，其值為 `ElasticacheImpact`。您可以在實驗範本中將此標籤新增至複寫群組，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的複寫群組，則會略過此動作。請注意，只有受影響 AZ 中具有節點的複寫群組才會被視為有效目標。

### 啟動 ARC 區域自動轉移
<a name="az-availability-scenario-actions-zonal-autoshift"></a>

AZ 電源中斷開始的五分鐘後，復原動作`aws:arc:start-zonal-autoshift`會自動將資源流量從指定的 AZ 移出電源中斷的剩餘 25 分鐘。在該持續時間之後，流量會移回原始 AZ。請注意，如果啟用自動轉移，在實際的可用區域電源中斷期間， AWS 會偵測中斷和轉移資源流量。雖然此輪班的時間不盡相同，但預估會在損害開始的五分鐘後發生。

此動作以已啟用 Amazon Application Recovery Controller (ARC) 的自動轉移資源為目標。根據預設，它會以具有標籤索引鍵 `AzImpairmentPower` 和值 的資源為目標`RecoverAutoshiftResources`。您可以在實驗範本中將此標籤新增至資源，或以您自己的標籤取代預設標籤。例如，您可能想要使用應用程式特定的標籤。根據預設，如果找不到有效的資源，則會略過此動作。

### 暫停 EBS I/O
<a name="az-availability-scenario-actions-pause-ebs-io"></a>

AZ 電源中斷後，一旦電源恢復，極少部分的執行個體可能會遇到無回應的 EBS 磁碟區。 AZ Availability: Power Interruption包含 [aws：ebs：pause-io](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#ebs-actions-reference)，讓 1 個 EBS 磁碟區處於無回應狀態。

根據預設，只有設定為在執行個體終止後保留的磁碟區才會成為目標。此動作以具有標籤名為 `AzImpairmentPower`且值為 的磁碟區為目標`APIPauseVolume`。您可以在實驗範本中將此標籤新增至磁碟區，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的磁碟區，則會略過此動作。

### 中斷對 S3 Express One Zone 目錄儲存貯體的連線
<a name="az-availability-scenario-actions-pause-network-connectivity-s3-express"></a>

在 AZ 電源中斷期間，無法存取存放在 AZ 中 S3 Express One Zone 目錄儲存貯體中的資料。可用區域：電力中斷包括 [aws：network：disrupt-connectivity](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#network-actions-reference)，以在實驗期間中斷受影響可用區域中子網路和單區域目錄儲存貯體之間的連線，導致區域端點資料平面 API 操作逾時。當運算與 AZ 中的儲存體共置時，使用此動作來測試中斷。

此動作以子網路為目標。依預設，它會以標籤名為 `AzImpairmentPower` 且值為 的子網路為目標`DisruptSubnet`。您可以在實驗範本中將此標籤新增至子網路，或以您自己的標籤取代預設標籤。根據預設，如果找不到有效的子網路，則會略過此動作。

## 限制
<a name="az-availability-scenario-limitations"></a>
+ 此案例不包含[停止條件](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions.html)。應用程式正確的停止條件應新增至實驗範本。
+  在目標 AZ 中，在 EC2 上執行的 Amazon EKS Pod 將以 EC2 工作者節點終止，並封鎖開始新的 EC2 節點。不過，不支援在 AWS Fargate 上執行的 Amazon EKS Pod。
+  在目標 AZ 中，在 EC2 上執行的 Amazon ECS 任務將以 EC2 工作者節點終止，並封鎖啟動新的 EC2 節點。不過，不支援在 AWS Fargate 上執行的 Amazon ECS 任務。
+ 不支援具有兩個可讀取待命資料庫執行個體的 [Amazon RDS Multi-AZ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/multi-az-db-clusters-concepts.html#multi-az-db-clusters-migrating-to-with-read-replica)。在此情況下，執行個體將終止、RDS 將容錯移轉，且容量將立即佈建回受影響的可用區域。受影響 AZ 中的可讀取待命將保持可用。

## 要求
<a name="az-availability-scenario-requirements"></a>
+ 將必要的許可新增至 AWS FIS [實驗角色](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role.html)。
+ 資源標籤必須套用到實驗目標的資源。這些可以使用您自己的標記慣例或案例中定義的預設標籤。

## 許可
<a name="az-availability-scenario-permissions"></a>

ARC 區域自動轉移使用 IAM 服務連結角色`AWSServiceRoleForZonalAutoshiftPracticeRun`代表您執行區域轉移。此角色使用 IAM 受管政策 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSZonalAutoshiftPracticeRunSLRPolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSZonalAutoshiftPracticeRunSLRPolicy.html)。您不需要手動建立角色。當您從 AWS CLI、 或 AWS SDK 中的 AZ 電力中斷案例建立實驗範本 AWS 管理主控台時，ARC 會為您建立服務連結角色。如需詳細資訊，請參閱[在 ARC 中使用服務連結角色進行區域自動轉移](https://docs.aws.amazon.com/r53recovery/latest/dg/using-service-linked-roles-zonal-autoshift.html)。

下列政策授予 AWS FIS 必要的許可，以執行具有 AZ Availability: Power Interruption案例的實驗。此政策必須連接到[實驗角色](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowFISExperimentLoggingActionsCloudwatch",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:network-acl/*",
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "CreateNetworkAcl",
                    "aws:RequestTag/managedByFIS": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkAcl",
            "Resource": "arn:aws:ec2:*:*:network-acl/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/managedByFIS": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkAclEntry",
                "ec2:DeleteNetworkAcl"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:network-acl/*",
                "arn:aws:ec2:*:*:vpc/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/managedByFIS": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkAcl",
            "Resource": "arn:aws:ec2:*:*:vpc/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVpcs",
                "ec2:DescribeManagedPrefixLists",
                "ec2:DescribeSubnets",
                "ec2:DescribeNetworkAcls"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:ReplaceNetworkAclAssociation",
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:network-acl/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:FailoverDBCluster"
            ],
            "Resource": [
                "arn:aws:rds:*:*:cluster:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "rds:RebootDBInstance"
            ],
            "Resource": [
                "arn:aws:rds:*:*:db:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticache:DescribeReplicationGroups",
                "elasticache:InterruptClusterAzPower"
            ],
            "Resource": [
                "arn:aws:elasticache:*:*:replicationgroup:*"
            ]
        },
        {
            "Sid": "TargetResolutionByTags",
            "Effect": "Allow",
            "Action": [
                "tag:GetResources"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant"
            ],
            "Resource": [
                "arn:aws:kms:*:*:key/*"
            ],
            "Condition": {
                "StringLike": {
                    "kms:ViaService": "ec2.*.amazonaws.com"
                },
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVolumes"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:PauseVolumeIO"
            ],
            "Resource": "arn:aws:ec2:*:*:volume/*"
        },
        {
            "Sid": "AllowInjectAPI",
            "Effect": "Allow",
            "Action": [
                "ec2:InjectApiError"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "ec2:FisActionId": [
                        "aws:ec2:api-insufficient-instance-capacity-error",
                        "aws:ec2:asg-insufficient-instance-capacity-error"
                    ]
                }
            }
        },
        {
            "Sid": "DescribeAsg",
            "Effect": "Allow",
            "Action": [
                "autoscaling:DescribeAutoScalingGroups"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## 案例內容
<a name="az-availability-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 主控台中的案例程式庫。

```
{
    "targets": {
        "IAM-role": {
            "resourceType": "aws:iam:role",
            "resourceArns": [],
            "selectionMode": "ALL"
        },
        "EBS-Volumes": {
            "resourceType": "aws:ec2:ebs-volume",
            "resourceTags": {
                "AzImpairmentPower": "ApiPauseVolume"
            },
            "selectionMode": "COUNT(1)",
            "parameters": {
                "availabilityZoneIdentifier": "us-east-1a"
            },
            "filters": [
                {
                    "path": "Attachments.DeleteOnTermination",
                    "values": [
                        "false"
                    ]
                }
            ]
        },
        "EC2-Instances": {
            "resourceType": "aws:ec2:instance",
            "resourceTags": {
                "AzImpairmentPower": "StopInstances"
            },
            "filters": [
                {
                    "path": "State.Name",
                    "values": [
                        "running"
                    ]
                },
                {
                    "path": "Placement.AvailabilityZone",
                    "values": [
                        "us-east-1a"
                    ]
                }
            ],
            "selectionMode": "ALL"
        },
        "ASG": {
            "resourceType": "aws:ec2:autoscaling-group",
            "resourceTags": {
                "AzImpairmentPower": "IceAsg"
            },
            "selectionMode": "ALL"
        },
        "ASG-EC2-Instances": {
            "resourceType": "aws:ec2:instance",
            "resourceTags": {
                "AzImpairmentPower": "IceAsg"
            },
            "filters": [
                {
                    "path": "State.Name",
                    "values": [
                        "running"
                    ]
                },
                {
                    "path": "Placement.AvailabilityZone",
                    "values": [
                        "us-east-1a"
                    ]
                }
            ],
            "selectionMode": "ALL"
        },
        "Subnet": {
            "resourceType": "aws:ec2:subnet",
            "resourceTags": {
                "AzImpairmentPower": "DisruptSubnet"
            },
            "filters": [
                {
                    "path": "AvailabilityZone",
                    "values": [
                        "us-east-1a"
                    ]
                }
            ],
            "selectionMode": "ALL",
            "parameters": {}
        },
        "RDS-Cluster": {
            "resourceType": "aws:rds:cluster",
            "resourceTags": {
                "AzImpairmentPower": "DisruptRds"
            },
            "selectionMode": "ALL",
            "parameters": {
                "writerAvailabilityZoneIdentifiers": "us-east-1a"
            }
        },
        "ElastiCache-Cluster": {
            "resourceType": "aws:elasticache:replicationgroup",
            "resourceTags": {
                "AzImpairmentPower": "DisruptElasticache"
            },
            "selectionMode": "ALL",
            "parameters": {
                "availabilityZoneIdentifier": "us-east-1a"
            }
        }
    },
    "actions": {
        "Pause-Instance-Launches": {
            "actionId": "aws:ec2:api-insufficient-instance-capacity-error",
            "parameters": {
                "availabilityZoneIdentifiers": "us-east-1a",
                "duration": "PT30M",
                "percentage": "100"
            },
            "targets": {
                "Roles": "IAM-role"
            }
        },
        "Pause-EBS-IO": {
            "actionId": "aws:ebs:pause-volume-io",
            "parameters": {
                "duration": "PT30M"
            },
            "targets": {
                "Volumes": "EBS-Volumes"
            },
            "startAfter": [
                "Stop-Instances",
                "Stop-ASG-Instances"
            ]
        },
        "Stop-Instances": {
            "actionId": "aws:ec2:stop-instances",
            "parameters": {
                "completeIfInstancesTerminated": "true",
                "startInstancesAfterDuration": "PT30M"
            },
            "targets": {
                "Instances": "EC2-Instances"
            }
        },
        "Pause-ASG-Scaling": {
            "actionId": "aws:ec2:asg-insufficient-instance-capacity-error",
            "parameters": {
                "availabilityZoneIdentifiers": "us-east-1a",
                "duration": "PT30M",
                "percentage": "100"
            },
            "targets": {
                "AutoScalingGroups": "ASG"
            }
        },
        "Stop-ASG-Instances": {
            "actionId": "aws:ec2:stop-instances",
            "parameters": {
                "completeIfInstancesTerminated": "true",
                "startInstancesAfterDuration": "PT30M"
            },
            "targets": {
                "Instances": "ASG-EC2-Instances"
            }
        },
        "Pause-network-connectivity": {
            "actionId": "aws:network:disrupt-connectivity",
            "parameters": {
                "duration": "PT2M",
                "scope": "all"
            },
            "targets": {
                "Subnets": "Subnet"
            }
        },
        "Failover-RDS": {
            "actionId": "aws:rds:failover-db-cluster",
            "parameters": {},
            "targets": {
                "Clusters": "RDS-Cluster"
            }
        },
        "Pause-ElastiCache": {
            "actionId": "aws:elasticache:replicationgroup-interrupt-az-power",
            "parameters": {
                "duration": "PT30M"
            },
            "targets": {
                "ReplicationGroups": "ElastiCache-Cluster"
            }
        }
    },
    "stopConditions": [
        {
            "source": "aws:cloudwatch:alarm",
            "value": ""
        }
    ],
    "roleArn": "",
    "tags": {
        "Name": "AZ Impairment: Power Interruption"
    },
    "logConfiguration": {
        "logSchemaVersion": 2
    },
    "experimentOptions": {
        "accountTargeting": "single-account",
        "emptyTargetResolutionMode": "skip"
    },
    "description": "Affect multiple resource types in a single AZ, targeting by tags and explicit ARNs, to approximate power interruption in one AZ."
}
```