

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 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>

在可用区电力中断期间，受影响可用区中的 EC2 实例将关闭。恢复供电后，实例将重启。AZ Availability: Power Interruption 包括 [aws:ec2:stop-instances](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#stop-instances)，用于在中断持续时间内停止受影响可用区中的所有实例。该持续时间过后，这些实例将重新启动。停止由 Amazon EKS 管理的 EC2 实例会导致相关 EKS 容器组（Pod）被删除。停止由 Amazon ECS 管理的 EC2 实例会导致相关 ECS 任务停止。

此操作以在受影响可用区中运行的 EC2 实例为目标。默认情况下，它以标签名为 `AzImpairmentPower`、值为 `StopInstances` 的实例为目标。您可以将此标签添加到实例中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的实例，则会跳过此操作。

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

在可用区电力中断期间，受影响可用区中由自动扩缩组管理的 EC2 实例将关闭。恢复供电后，实例将重启。AZ Availability: Power Interruption 包括 [aws:ec2:stop-instances](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#stop-instances)，用于在中断持续时间内停止受影响可用区中的所有实例，包括由自动扩缩管理的实例。该持续时间过后，这些实例将重新启动。

此操作以在受影响可用区中运行的 EC2 实例为目标。默认情况下，它以标签名为 `AzImpairmentPower`、值为 `IceAsg` 的实例为目标。您可以将此标签添加到实例中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的实例，则会跳过此操作。

### 暂停实例启动
<a name="az-availability-scenario-actions-pause-instance-launches"></a>

在可用区电力中断期间，对该可用区中预置容量的 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)，以防止在受影响的可用区中配置新实例。

此操作确定用于预置实例的目标 IAM 角色。这些角色必须通过 ARN 进行确定。默认情况下，如果找不到有效的 IAM 角色，则会跳过此操作。

### 暂停 ASG 扩缩
<a name="az-availability-scenario-actions-pause-asg-scaling"></a>

 在可用区电力中断期间，自动扩缩控制面板为恢复可用区中丢失的容量而进行的 EC2 API 调用将失败。特别是，以下内容 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 在受影响的可用区中进行扩缩。

此操作以自动扩缩组为目标。默认情况下，它以标签名为 `AzImpairmentPower`、值为 `IceAsg` 的自动扩缩组为目标。您可以将此标签添加到自动扩缩组中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的自动扩缩组，则会跳过此操作。

### 暂停网络连接
<a name="az-availability-scenario-actions-pause-network-connectivity"></a>

在可用区电力中断期间，可用区中的联网将不可用。发生这种情况时，某些 AWS 服务可能需要几分钟时间更新 DNS，以反映受影响可用区中的私有端点不可用。在此期间，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)，用于阻止受影响可用区中所有子网的所有网络连接并持续 2 分钟。这将强制大多数应用程序超时和 DNS 刷新。2 分钟后结束该操作，可以随后在可用区仍然不可用的情况下恢复区域服务 DNS。

此操作以子网为目标。默认情况下，它以标签名为 `AzImpairmentPower`、值为 `DisruptSubnet` 的集群为目标。您可以将此标签添加到子网中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的子网，则会跳过此操作。

### 故障转移 RDS
<a name="az-availability-scenario-actions-failover-rds"></a>

在可用区电力中断期间，受影响可用区中的 RDS 节点将关闭。受影响可用区中的单个可用区 RDS 节点将完全不可用。对于多可用区集群，写入器节点将故障转移到未受影响的可用区，受影响可用区中的读取器节点将不可用。对于多可用区集群，如果写入器位于受影响的可用区中，则AZ Availability: Power Interruption包括 [aws: rds: failover-db-cluster](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#failover-db-cluster) 以进行故障转移。

此操作以 RDS 集群为目标。默认情况下，它以标签名为 `AzImpairmentPower`、值为 `DisruptRds` 的集群为目标。您可以将此标签添加到集群中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的集群，则会跳过此操作。

### 暂停 ElastiCache 复制组
<a name="az-availability-scenario-actions-pause-elasticache"></a>

在可用区电源中断期间，可用区中的 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)，用于终止受影响可用区中的 ElastiCache 节点。在中断期间，不会在受影响的可用区中配置新实例，因此复制组的容量将保持在减少的状态。

此操作以 ElastiCache 复制组为目标。默认情况下，它以复制组为目标，其标签名`AzImpairmentPower`为，值为`ElasticacheImpact`。您可以将此标签添加到复制组中，也可以将默认标签替换为实验模板中您自己的标签。默认情况下，如果未找到有效的复制组，则将跳过此操作。请注意，只有节点位于受影响可用区的复制组才会被视为有效目标。

### 启动 ARC 区域自动换档
<a name="az-availability-scenario-actions-zonal-autoshift"></a>

在可用区电源中断开始五分钟后，在剩余的 25 分钟电源中断期间，恢复操作`aws:arc:start-zonal-autoshift`会自动将资源流量从指定的可用区转移出去。在这段时间之后，流量会转移回原来的可用区。请注意，在现实世界的可用区中，如果启用了自动换档，则电源中断 AWS 将检测到损耗并转移资源流量。虽然这种转移的时间各不相同，但估计是在减值开始后五分钟内发生的。

此操作针对支持自动移位的 Amazon 应用程序恢复控制器 (ARC) 资源。默认情况下，它以标签键`AzImpairmentPower`和值为目标的资源`RecoverAutoshiftResources`。您可以将此标签添加到您的资源中，也可以将默认标签替换为实验模板中您自己的标签。例如，您可能想要使用特定于应用程序的标签。默认情况下，如果未找到有效资源，则会跳过此操作。

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

可用区电力中断后，一旦恢复供电，极少数实例可能会遇到 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 区域目录存储桶的连接
<a name="az-availability-scenario-actions-pause-network-connectivity-s3-express"></a>

在可用区电源中断期间，无法访问存储在可用区中 S3 Express One Zone 目录存储桶中的数据。可用区可用[性：电源中断包括 aws: network: disrupt-connectivity，用于在实验期间中断](https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#network-actions-reference)子网与受影响可用区中单区域目录存储桶之间的连接，从而导致区域端点数据平面 API 操作超时。使用此操作可以测试计算与存储位于同一可用区内的中断情况。

此操作以子网为目标。默认情况下，它以`AzImpairmentPower`带有名为、值为的标签的子网为目标。`DisruptSubnet`您可以将此标签添加到子网中，也可以在实验模板中用自己的标签替换默认标签。默认情况下，如果找不到有效的子网，则会跳过此操作。

## 限制
<a name="az-availability-scenario-limitations"></a>
+ 此场景不包括[停止条件](https://docs.aws.amazon.com/fis/latest/userguide/stop-conditions.html)。应将适用于您应用程序的正确停止条件添加到实验模板中。
+  在目标可用区中，在 EC2 上运行的 Amazon EKS 容器组将通过 EC2 Worker 节点终止，并且将阻止新 EC2 节点启动。但是，不支持在 AWS Fargate 上运行的 Amazon EKS 容器组。
+  在目标可用区中，在 EC2 上运行的 Amazon ECS 任务将通过 EC2 Worker 节点终止，并且将阻止新 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 将进行故障转移，容量将立即预置回受影响的可用区。受影响可用区中的可读备用副本将仍然可用。

## 要求
<a name="az-availability-scenario-requirements"></a>
+ 为 AWS FIS [实验角色](https://docs.aws.amazon.com/fis/latest/userguide/getting-started-iam-service-role.html)添加所需的权限。
+ 必须将资源标签应用于实验的目标资源。它们可以使用您自己的标签约定，也可以使用场景中定义的默认标签。

## Permissions
<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 管理控制台、或 AWS SDK 中根据可用区电源中断场景创建实验模板时，ARC 会为您创建服务相关角色。 AWS CLI有关更多信息，请参阅在 AR [C 中使用服务相关角色进行区域自动切换](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 [create-experiment-template](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/fis/create-experiment-template.html)命令行界面 (AWS CLI) Line CLI 中的命令创建[实验模板](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."
}
```