AZ Availability: Power Interruption - AWS 故障注入服務

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

AZ Availability: Power Interruption

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

此案例可用於證明異地同步備份應用程式在單一完整 AZ 電源中斷期間如預期般運作。其中包括區域運算遺失 (Amazon EC2、EKS 和 ECS)、AZ 中沒有重新擴展運算、子網路連線中斷、RDS 容錯移轉、 ElastiCache 容錯移轉和無回應的 EBS 磁碟區。依預設,將略過找不到目標的動作。

動作

下列動作共同產生單一 AZ 完全電源中斷的許多預期症狀。AZ 可用性:電源中斷只會影響預期在單一 AZ 電源中斷期間會產生影響的服務。根據預設,案例會注入 30 分鐘的電源中斷症狀,然後再注入 30 分鐘的時間,可能會注入復原期間可能發生的症狀。

停止執行個體

在 AZ 電源中斷期間,受影響可用區域中的 EC2 執行個體將關閉。恢復電源後,實例將重新啟動。 AZ Availability: Power Interruption包括 aw: ec2: stop-執行個體,可在中斷持續時間內停止受影響 AZ 中的所有執行個體。持續時間過後,執行個體便會重新啟動。停止由 Amazon EKS 管理的 EC2 執行個體會導致相依的 EKS 網繭遭到刪除。停止由 Amazon ECS 管理的 EC2 執行個體會導致停止相依的 ECS 任務。

此動作鎖定在受影響 AZ 中執行的 EC2 執行個體。依預設,它會針對具有以值命名的標籤AzImpairmentPower的執行個體StopInstances。您可以將此標籤添加到實例中,也可以在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的實例,則會略過此動作。

停止 ASG 實例

在 AZ 電源中斷期間,受影響的可用區域中由 Auto Scaling 群組管理的 EC2 執行個體將會關閉。恢復電源後,實例將重新啟動。 AZ Availability: Power Interruption包括 aw: ec2:停止執行個體,可在中斷持續時間內停止受影響的 AZ 中的所有執行個體,包括由 Auto S caling 管理的執行個體。持續時間過後,執行個體便會重新啟動。

此動作鎖定在受影響 AZ 中執行的 EC2 執行個體。依預設,它會針對具有以值命名的標籤AzImpairmentPower的執行個體IceAsg。您可以將此標籤添加到實例中,也可以在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的實例,則會略過此動作。

暫停實例啟動

在 AZ 電源中斷期間,在 AZ 中佈建容量的 EC2 API 呼叫將會失敗。特別是,下列 API 會受到影響:ec2:StartInstancesec2:CreateFleet、和ec2:RunInstances。 AZ Availability: Power Interruption includes包括 aw: ec2: API 不足-執行個體容量錯誤,以防止在受影響的可用區域中佈建新的執行個體。

此動作鎖定用於佈建執行個體的 IAM 角色。這些必須使用 ARN 定位。依預設,如果找不到有效的 IAM 角色,則會略過此動作。

暫停 ASG 調整比例

在 AZ 電源中斷期間,Auto Scaling 控制平面為復原 AZ 中遺失的容量所發出的 EC2 API 呼叫將會失敗。特別是,下列 API 會受到影響:ec2:StartInstancesec2:CreateFleet、和ec2:RunInstances。 AZ Availability: Power Interruption包括 aw: ec2: asg-執行個體容量錯誤,以防止在受影響的 AZ 中佈建新的執行個體。這也可以防止 Amazon EKS 和 Amazon ECS 在受影響的可用區域擴展。

此動作會鎖定「Auto Scaling」群組。依預設,它會以「Auto Scaling」群組的目標為目標,其名稱為AzImpairmentPower值為IceAsg。您可以將此標記添加到 Auto Scaling 組中,或者在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的「Auto Scaling」群組,則會略過此動作。

暫停網路連線

在 AZ 電源中斷期間,AZ 中的網路將無法使用。發生這種情況時,某些 AWS 服務可能需要幾分鐘才能更新 DNS,以反映受影響 AZ 中的私有端點無法使用。在此期間,DNS 查閱可能會傳回無法存取的 IP 位址。 AZ Availability: Power Interruption包括 aws: network: 中斷連線,以封鎖受影響 AZ 中所有子網路的所有網路連線 2 分鐘。這會強制大多數應用程式的逾時和 DNS 重新整理。在 2 分鐘後結束動作,可在 AZ 繼續無法使用的情況下繼續復原區域服務 DNS。

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

容錯移轉 RDS

在 AZ 電源中斷期間,受影響的可用區域中的 RDS 節點將會關閉。受影響可用區域中的單一 AZ RDS 節點將完全無法使用。對於異地同步備份叢集,寫入器節點將容錯移轉至未受影響的 AZ,且受影響可用區中的讀取器節點將無法使用。對於異地同步備份叢集,如果寫入器位於受影響的可用區域中,則AZ Availability: Power Interruption包括 aw: RDS: 容錯移轉 db 叢集以進行容錯移轉。

此動作以 RDS 叢集為目標。依預設,它會以值命名為AzImpairmentPower的標籤鎖定叢集DisruptRds。您可以將此標記添加到集群中,也可以在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的叢集,則會略過此動作。

暫停 ElastiCache 雷迪斯

AZ 電源中斷期間,AZ 中的 ElastiCache 節點無法使用。 AZ Availability: Power Interruption包括:彈性:中斷叢集- AZ-電源,以終止受影響的 AZ 中的節點。 ElastiCache 在中斷期間,不會在受影響的可用區域中佈建新的執行個體,因此叢集將維持在較低的容量。

此動作以 ElastiCache 叢集為目標。依預設,它會以值命名為AzImpairmentPower的標籤鎖定叢集ElasticacheImpact。您可以將此標記添加到集群中,也可以在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的叢集,則會略過此動作。請注意,只有在受影響的 AZ 中具有寫入器節點的叢集才會被視為有效目標。

暫停 EBS I/O

AZ 電源中斷後,一旦恢復電源,只有極小的執行個體可能會遇到無回應的 EBS 磁碟區。 AZ Availability: Power Interruption包括提示:eb-io:暫停,使 1 個 EBS 卷處於無響應狀態。

根據預設,只有設定為在執行個體終止後持續存在的磁碟區才會成為目標。此動作的目標磁碟區具AzImpairmentPower有以值命名的標籤APIPauseVolume。您可以將此標籤添加到卷中,也可以在實驗模板中用自己的標籤替換默認標籤。依預設,如果找不到有效的磁碟區,則會略過此動作。

限制

  • 此案例不包含停止條件。應將應用程序的正確停止條件添加到實驗模板中。

  • 不支援在 AWS Fargate 上執行的 Amazon EKS 網繭。

  • 不支援在 AWS Fargate 上執行的 Amazon ECS 任務。

  • 不支援具有兩個可讀取待命資料庫執行個體的 Amazon RDS 異地同步備份。在此情況下,執行個體將終止、RDS 將容錯移轉,且容量將立即佈建回受影響的可用區域中。受影響 AZ 中的可讀取待命狀態將保持可用狀態。

要求

  • 將必要的權限新增至 AWS FIS 實驗角色

  • 資源標籤必須應用於要被實驗定位的資源。這些可以使用您自己的標記慣例或在案例中定義的預設標籤。

許可

以下政策授予 AWS FIS 執行AZ Availability: Power Interruption案例實驗的必要許可。此原則必須附加至實驗角色

{ "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": [ "*" ] } ] }

案例內容

下列內容定義案例。您可以儲存此 JSON,並使用 AWS Command Line Interface (AWS CLI) (AWS CLI) 的「建立實驗範」命令建立實驗範本。如需最新版本的案例,請造訪 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:redis-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:interrupt-cluster-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." }