AZ Availability: Power Interruption - AWS Fehlerinjektionsservice

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AZ Availability: Power Interruption

Sie können das AZ Availability: Power Interruption Szenario verwenden, um die erwarteten Symptome einer vollständigen Stromunterbrechung in einer Availability Zone (AZ) auszulösen.

Dieses Szenario kann verwendet werden, um zu demonstrieren, dass Multi-AZ-Anwendungen während einer einzigen, vollständigen AZ-Stromunterbrechung erwartungsgemäß funktionieren. Dazu gehören der Verlust von zonaler Rechenleistung (Amazon EC2, EKS und ECS), keine erneute Skalierung der Rechenleistung in der AZ, Verlust der Subnetzkonnektivität, RDS-Failover, Failover und nicht reagierende ElastiCache EBS-Volumes. Standardmäßig werden Aktionen, für die keine Ziele gefunden wurden, übersprungen.

Aktionen

Zusammen führen die folgenden Aktionen zu vielen der zu erwartenden Symptome einer vollständigen Stromunterbrechung in einer einzigen AZ. AZ-Verfügbarkeit: Die Stromunterbrechung wirkt sich nur auf Dienste aus, bei denen davon ausgegangen wird, dass sie während einer einzigen AZ-Stromunterbrechung beeinträchtigt werden. Standardmäßig werden in diesem Szenario 30 Minuten lang Symptome einer Stromunterbrechung und dann weitere 30 Minuten lang Symptome auftreten, die während der Wiederherstellung auftreten können.

Stopp-Instanzen

Während einer AZ-Stromunterbrechung werden die EC2-Instances in der betroffenen AZ heruntergefahren. Nach der Wiederherstellung der Stromversorgung werden die Instances neu gestartet. AZ Availability: Power Interruptionbeinhaltet aws:ec2:stop-instances, um alle Instances in der betroffenen AZ für die Dauer der Unterbrechung zu stoppen. Nach Ablauf der Dauer werden die Instanzen neu gestartet. Das Stoppen von EC2-Instances, die von Amazon EKS verwaltet werden, führt dazu, dass abhängige EKS-Pods gelöscht werden. Das Stoppen von EC2-Instances, die von Amazon ECS verwaltet werden, führt dazu, dass abhängige ECS-Aufgaben gestoppt werden.

Diese Aktion zielt auf EC2-Instances ab, die in der betroffenen AZ ausgeführt werden. Standardmäßig zielt sie auf Instances ab, deren Tag AzImpairmentPower den Wert hat. StopInstances Sie können dieses Tag zu Ihren Instanzen hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Instanzen gefunden werden, wird diese Aktion standardmäßig übersprungen.

Stop-ASG-Instanzen

Während einer AZ-Stromunterbrechung werden EC2-Instances, die von einer Auto Scaling Scaling-Gruppe in der betroffenen AZ verwaltet werden, heruntergefahren. Nach der Wiederherstellung der Stromversorgung werden die Instances neu gestartet. AZ Availability: Power Interruptionbeinhaltet aws:ec2:stop-instances, um alle Instances, einschließlich der von Auto Scaling verwalteten, in der betroffenen AZ für die Dauer der Unterbrechung zu stoppen. Nach Ablauf der Dauer werden die Instances neu gestartet.

Diese Aktion zielt auf EC2-Instances ab, die in der betroffenen AZ ausgeführt werden. Standardmäßig zielt sie auf Instances ab, deren Tag AzImpairmentPower den Wert hat. IceAsg Sie können dieses Tag zu Ihren Instanzen hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Instanzen gefunden werden, wird diese Aktion standardmäßig übersprungen.

Instanzstarts pausieren

Während einer AZ-Stromunterbrechung schlagen EC2-API-Aufrufe zur Bereitstellung von Kapazität in der AZ fehl. Insbesondere die folgenden APIs werden betroffen sein: ec2:StartInstancesec2:CreateFleet, und. ec2:RunInstances AZ Availability: Power Interruption includesbeinhaltet aws:ec2:api-insufficient-instance-capacity-error, um zu verhindern, dass neue Instances in der betroffenen AZ bereitgestellt werden.

Diese Aktion zielt auf IAM-Rollen ab, die zur Bereitstellung von Instanzen verwendet werden. Diese müssen mit einem ARN ins Visier genommen werden. Wenn keine gültigen IAM-Rollen gefunden werden, wird diese Aktion standardmäßig übersprungen.

Unterbrechen Sie die ASG-Skalierung

Während einer AZ-Stromunterbrechung schlagen EC2-API-Aufrufe der Auto Scaling-Steuerebene zur Wiederherstellung verlorener Kapazität in der AZ fehl. Insbesondere die folgenden APIs werden betroffen sein: ec2:StartInstancesec2:CreateFleet, und. ec2:RunInstances AZ Availability: Power Interruptionbeinhaltet aws:ec2:asg-insufficient-instance-capacity-error, um zu verhindern, dass neue Instances in der betroffenen AZ bereitgestellt werden. Dadurch wird auch verhindert, dass Amazon EKS und Amazon ECS in der betroffenen AZ skaliert werden.

Diese Aktion zielt auf Auto Scaling Scaling-Gruppen ab. Standardmäßig zielt es auf Auto Scaling Scaling-Gruppen ab, AzImpairmentPower deren Tag den Wert hatIceAsg. Sie können dieses Tag zu Ihren Auto Scaling Scaling-Gruppen hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Auto Scaling Scaling-Gruppen gefunden werden, wird diese Aktion standardmäßig übersprungen.

Netzwerkkonnektivität unterbrechen

Während einer Stromunterbrechung ist das Netzwerk in der AZ nicht verfügbar. In diesem Fall kann es bei einigen AWS-Services bis zu ein paar Minuten dauern, bis das DNS aktualisiert wird, um widerzuspiegeln, dass private Endpunkte in der betroffenen AZ nicht verfügbar sind. Während dieser Zeit können DNS-Abfragen IP-Adressen zurückgeben, auf die nicht zugegriffen werden kann. AZ Availability: Power Interruptionbeinhaltet aws:network:disrupt-connectivity, um die gesamte Netzwerkkonnektivität für alle Subnetze in der betroffenen AZ für 2 Minuten zu blockieren. Dadurch werden Timeouts und DNS-Aktualisierungen für die meisten Anwendungen erzwungen. Wenn die Aktion nach 2 Minuten beendet wird, kann das DNS des regionalen Dienstes anschließend wiederhergestellt werden, solange die AZ weiterhin nicht verfügbar ist.

Diese Aktion zielt auf Subnetze ab. Standardmäßig zielt sie auf Cluster ab, deren Tag AzImpairmentPower den Wert hat. DisruptSubnet Sie können dieses Tag zu Ihren Subnetzen hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Subnetze gefunden werden, wird diese Aktion standardmäßig übersprungen.

Failover RDS

Während einer AZ-Stromunterbrechung werden die RDS-Knoten in der betroffenen AZ heruntergefahren. Einzelne AZ-RDS-Knoten in der betroffenen AZ werden vollständig nicht verfügbar sein. Bei Multi-AZ-Clustern führt der Writer-Knoten ein Failover in eine nicht betroffene AZ durch und Leseknoten in der betroffenen AZ sind nicht verfügbar. Bei Multi-AZ-Clustern AZ Availability: Power Interruption umfasst dies aws:rds:failover-db-cluster zum Failover, wenn sich der Writer in der betroffenen AZ befindet.

Diese Aktion zielt auf RDS-Cluster ab. Standardmäßig zielt sie auf Cluster ab, deren Tag AzImpairmentPower den Wert hatDisruptRds. Sie können dieses Tag zu Ihren Clustern hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Cluster gefunden werden, wird diese Aktion standardmäßig übersprungen.

Redis pausieren ElastiCache

Während einer Stromunterbrechung sind die ElastiCache Knoten in der AZ nicht verfügbar. AZ Availability: Power Interruptionbeinhaltet aws:elasticache:interrupt-cluster-az-power zur Terminierung von Knoten in der betroffenen AZ. ElastiCache Für die Dauer der Unterbrechung werden keine neuen Instances in der betroffenen AZ bereitgestellt, sodass der Cluster weiterhin über eine reduzierte Kapazität verfügt.

Diese Aktion zielt auf ElastiCache Cluster ab. Standardmäßig zielt sie auf Cluster ab, deren Tag AzImpairmentPower den Wert hatElasticacheImpact. Sie können dieses Tag zu Ihren Clustern hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Cluster gefunden werden, wird diese Aktion standardmäßig übersprungen. Beachten Sie, dass nur Cluster mit Writer-Knoten in der betroffenen AZ als gültige Ziele betrachtet werden.

Halten Sie die EBS-I/O an

Nach einer AZ-Stromunterbrechung kann es bei einem sehr kleinen Prozentsatz der Instances vorkommen, dass EBS-Volumes nicht mehr reagieren, sobald die Stromversorgung wiederhergestellt ist. AZ Availability: Power Interruptionbeinhaltet aws:ebs:pause-io, sodass ein EBS-Volume nicht mehr reagiert.

Standardmäßig werden nur Volumes als Ziel ausgewählt, die so eingestellt sind, dass sie auch nach dem Beenden der Instance bestehen bleiben. Diese Aktion zielt auf Volumes ab, AzImpairmentPower deren Tag den Wert hat. APIPauseVolume Sie können dieses Tag zu Ihren Bänden hinzufügen oder das Standard-Tag in der Experimentvorlage durch Ihr eigenes Tag ersetzen. Wenn keine gültigen Volumen gefunden werden, wird diese Aktion standardmäßig übersprungen.

Einschränkungen

  • Dieses Szenario beinhaltet keine Stoppbedingungen. Die richtigen Stoppbedingungen für Ihre Anwendung sollten der Versuchsvorlage hinzugefügt werden.

  • Amazon EKS-Pods, die auf AWS Fargate ausgeführt werden, werden nicht unterstützt.

  • Amazon ECS-Aufgaben, die auf AWS Fargate ausgeführt werden, werden nicht unterstützt.

  • Amazon RDS Multi-AZ mit zwei lesbaren Standby-DB-Instances wird nicht unterstützt. In diesem Fall werden die Instances beendet, ein RDS-Failover durchgeführt und die Kapazität wird sofort wieder in der betroffenen AZ bereitgestellt. Der lesbare Standby-Modus in der betroffenen AZ bleibt verfügbar.

Voraussetzungen

  • Fügen Sie der AWS FIS-Experimentrolle die erforderliche Berechtigung hinzu.

  • Ressourcen-Tags müssen auf Ressourcen angewendet werden, auf die das Experiment abzielen soll. Diese können Ihre eigene Tagging-Konvention oder die im Szenario definierten Standard-Tags verwenden.

Berechtigungen

Die folgende Richtlinie gewährt AWS FIS die erforderlichen Berechtigungen, um ein Experiment mit dem AZ Availability: Power Interruption Szenario durchzuführen. Diese Richtlinie muss der Rolle des Experiments zugeordnet werden.

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

Inhalt des Szenarios

Der folgende Inhalt definiert das Szenario. Diese JSON-Datei kann gespeichert und verwendet werden, um mithilfe des Befehls create-experiment-template über die AWS-Befehlszeilenschnittstelle (AWS CLI) eine Experimentvorlage zu erstellen. Die neueste Version des Szenarios finden Sie in der Szenariobibliothek in der FIS-Konsole.

{ "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." }