View a markdown version of this page

Disponibilità AZ: interruzione dell'alimentazione - AWS Servizio di iniezione guasti

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Disponibilità AZ: interruzione dell'alimentazione

È possibile utilizzare lo AZ Availability: Power Interruption scenario per indurre i sintomi previsti di un'interruzione completa dell'alimentazione in una zona di disponibilità (AZ).

Questo scenario può essere utilizzato per dimostrare che le applicazioni Multi-AZ funzionano come previsto durante una singola interruzione completa dell'alimentazione AZ. Include perdita di elaborazione zonale (Amazon EC2, EKS ed ECS), nessun ridimensionamento dell'elaborazione in AZ, perdita della connettività della sottorete, failover RDS, failover, accesso alterato ai bucket di directory S3 Express One Zone e volumi ElastiCache EBS che non rispondono. Per impostazione predefinita, le azioni per le quali non viene trovato alcun obiettivo verranno ignorate.

Azioni

Insieme, le seguenti azioni creano molti dei sintomi attesi di un'interruzione completa dell'alimentazione in una singola AZ. Disponibilità AZ: l'interruzione dell'alimentazione influisce solo sui servizi che dovrebbero avere un impatto durante una singola interruzione dell'alimentazione AZ. Per impostazione predefinita, lo scenario inietta i sintomi di interruzione dell'alimentazione per 30 minuti e quindi, per altri 30 minuti, i sintomi che possono verificarsi durante il ripristino.

Stop-Instances

Durante un'interruzione dell'alimentazione AZ, le istanze EC2 nell'AZ interessata verranno chiuse. Dopo il ripristino dell'alimentazione, le istanze verranno riavviate. AZ Availability: Power Interruptioninclude aws:ec2:stop-instances per fermare tutte le istanze nell'AZ interessato per la durata dell'interruzione. Dopo la durata, le istanze vengono riavviate. L'interruzione delle istanze EC2 gestite da Amazon EKS causa l'eliminazione dei pod EKS dipendenti. L'interruzione delle istanze EC2 gestite da Amazon ECS causa l'interruzione delle attività ECS dipendenti.

Questa azione è indirizzata alle istanze EC2 in esecuzione nell'AZ interessato. Per impostazione predefinita, si rivolge alle istanze con un tag denominato AzImpairmentPower con un valore di. StopInstances Puoi aggiungere questo tag alle tue istanze o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovata alcuna istanza valida, questa azione verrà ignorata.

Stop-ASG-Instances

Durante un'interruzione dell'alimentazione AZ, le istanze EC2 gestite da un gruppo Auto Scaling nell'AZ interessato verranno chiuse. Dopo il ripristino dell'alimentazione, le istanze verranno riavviate. AZ Availability: Power Interruptioninclude aws:ec2:stop-instances per arrestare tutte le istanze, incluse quelle gestite da Auto Scaling, nell'AZ interessata per la durata dell'interruzione. Trascorsa la durata, le istanze vengono riavviate.

Questa azione è indirizzata alle istanze EC2 in esecuzione nell'AZ interessato. Per impostazione predefinita, si rivolge alle istanze con un tag denominato AzImpairmentPower con un valore di. IceAsg Puoi aggiungere questo tag alle tue istanze o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovata alcuna istanza valida, questa azione verrà ignorata.

Sospendi gli avvii delle istanze

Durante un'interruzione dell'alimentazione AZ, le chiamate API EC2 per fornire capacità nell'AZ falliranno. In particolare, saranno interessate le seguenti API:ec2:StartInstances,, e. ec2:CreateFleet ec2:RunInstances AZ Availability: Power Interruption includesinclude aws:ec2:api-insufficient-instance-capacity-error per impedire il provisioning di nuove istanze nell'AZ interessata.

Questa azione riguarda i ruoli IAM utilizzati per il provisioning delle istanze. Questi devono essere mirati utilizzando un ARN. Per impostazione predefinita, se non viene trovato alcun ruolo IAM valido, questa azione verrà ignorata.

Metti in pausa ASG Scaling

Durante un'interruzione dell'alimentazione AZ, le chiamate API EC2 effettuate dal piano di controllo Auto Scaling per recuperare la capacità persa nell'AZ avranno esito negativo. In particolare, saranno interessate le seguenti API:,, e. ec2:StartInstances ec2:CreateFleet ec2:RunInstances AZ Availability: Power Interruptioninclude aws:ec2:asg-insufficient-instance-capacity-error per impedire il provisioning di nuove istanze nell'AZ interessata. Ciò impedisce inoltre ad Amazon EKS e Amazon ECS di scalare nella AZ interessata.

Questa azione è destinata ai gruppi Auto Scaling. Per impostazione predefinita, si rivolge ai gruppi Auto Scaling con un tag denominato AzImpairmentPower con un valore di. IceAsg Puoi aggiungere questo tag ai tuoi gruppi Auto Scaling o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non vengono trovati gruppi Auto Scaling validi, questa azione verrà ignorata.

Sospendi la connettività di rete

Durante un'interruzione dell'alimentazione AZ, la rete nella AZ non sarà disponibile. In questo caso, alcuni servizi AWS possono richiedere alcuni minuti per aggiornare il DNS per indicare che gli endpoint privati nell'AZ interessata non sono disponibili. Durante questo periodo, le ricerche DNS possono restituire indirizzi IP inaccessibili. AZ Availability: Power Interruptioninclude aws:network:disrupt-connectivity per bloccare tutta la connettività di rete per tutte le sottoreti nell'AZ interessata per 2 minuti. Ciò forzerà i timeout e gli aggiornamenti del DNS per la maggior parte delle applicazioni. La fine dell'azione dopo 2 minuti consente il successivo ripristino del DNS del servizio regionale mentre l'AZ continua a non essere disponibile.

Questa azione è destinata alle sottoreti. Per impostazione predefinita, si rivolge ai cluster con un tag denominato AzImpairmentPower con un valore di. DisruptSubnet Puoi aggiungere questo tag alle tue sottoreti o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovata alcuna sottorete valida, questa azione verrà ignorata.

Failover RDS

Durante un'interruzione dell'alimentazione AZ, i nodi RDS nell'AZ interessato si spengono. I singoli nodi AZ RDS nella AZ interessata non saranno completamente disponibili. Per i cluster Multi-AZ, il nodo writer eseguirà il failover in un AZ non interessato e i nodi di lettura nell'AZ interessato non saranno disponibili. Per i cluster Multi-AZ, AZ Availability: Power Interruption include aws:rds:failover-db-cluster per il failover se il writer si trova nell'AZ interessato.

Questa azione è destinata ai cluster RDS. Per impostazione predefinita, si rivolge ai cluster con un tag denominato AzImpairmentPower con un valore di. DisruptRds Puoi aggiungere questo tag ai tuoi cluster o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovato alcun cluster valido, questa azione verrà ignorata.

Metti in pausa ElastiCache il gruppo di replica

Durante un'interruzione dell'alimentazione AZ, ElastiCache i nodi dell'AZ non sono disponibili. AZ Availability: Power Interruptioninclude https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#interrupt-elasticache aws:elasticache:replicationgroup-interrupt-az-power per terminare i nodi nell'AZ interessata. ElastiCache Per tutta la durata dell'interruzione, non verrà eseguito il provisioning di nuove istanze nell'AZ interessato, pertanto il gruppo di replica rimarrà a capacità ridotta.

Questa azione è destinata ai gruppi di replica. ElastiCache Per impostazione predefinita, si rivolge ai gruppi di replica con un tag denominato AzImpairmentPower con un valore diElasticacheImpact. È possibile aggiungere questo tag ai gruppi di replica o sostituire il tag predefinito con un tag personalizzato nel modello dell'esperimento. Per impostazione predefinita, se non viene trovato alcun gruppo di replica valido, questa azione verrà ignorata. Si noti che solo i gruppi di replica con nodi nell'AZ interessato saranno considerati destinazioni valide.

Avviare ARC Zonal Autoshift

Cinque minuti dopo l'inizio dell'interruzione dell'alimentazione AZ, l'azione di ripristino allontana aws:arc:start-zonal-autoshift automaticamente il traffico di risorse dall'AZ specificato per i restanti 25 minuti dell'interruzione dell'alimentazione. Trascorso tale periodo, il traffico torna alla AZ originale. Tieni presente che durante una AZ reale, l'interruzione dell'alimentazione AWS rileverà la compromissione e sposterà il traffico di risorse se il passaggio automatico è abilitato. Sebbene la tempistica di questo turno vari, si stima che avvenga cinque minuti dopo l'inizio della compromissione.

Questa azione riguarda le risorse abilitate al passaggio automatico di Amazon Application Recovery Controller (ARC). Per impostazione predefinita, si rivolge alle risorse con la chiave e il valore del tag. AzImpairmentPower RecoverAutoshiftResources Puoi aggiungere questo tag alle tue risorse o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Ad esempio, potresti voler utilizzare un tag specifico dell'applicazione. Per impostazione predefinita, se non vengono trovate risorse valide, questa azione verrà ignorata.

Metti in pausa EBS I/O

Dopo un'interruzione dell'alimentazione AZ, una volta ripristinata l'alimentazione, in una percentuale molto ridotta di istanze i volumi EBS potrebbero non rispondere. AZ Availability: Power Interruptioninclude aws:ebs:pause-io per lasciare 1 volume EBS in uno stato di inattività.

Per impostazione predefinita, vengono presi di mira solo i volumi impostati per persistere dopo la chiusura dell'istanza. Questa azione è indirizzata ai volumi con un tag denominato AzImpairmentPower con un valore di. APIPauseVolume Puoi aggiungere questo tag ai tuoi volumi o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovato alcun volume valido, questa azione verrà ignorata.

Interrompi la connettività ai bucket di directory S3 Express One Zone

Durante un'interruzione dell'alimentazione AZ, i dati archiviati nei bucket di directory S3 Express One Zone nella AZ non sono accessibili. Disponibilità AZ: Power Interruption include aws:network:disrupt-connectivity per interrompere la connettività tra le sottoreti e i bucket di directory One Zone nell'AZ interessato per tutta la durata dell'esperimento, con conseguenti timeout delle operazioni dell'API Zonal Endpoint Data Plane. Usa questa azione per testare le interruzioni quando l'elaborazione è collocata contemporaneamente allo storage in un AZ.

Questa azione è destinata alle sottoreti. Per impostazione predefinita, si rivolge alle sottoreti con un tag denominato AzImpairmentPower con un valore di. DisruptSubnet Puoi aggiungere questo tag alle tue sottoreti o sostituire il tag predefinito con il tuo tag nel modello dell'esperimento. Per impostazione predefinita, se non viene trovata alcuna sottorete valida, questa azione verrà ignorata.

Limitazioni

  • Questo scenario non include le condizioni di arresto. Le condizioni di arresto corrette per l'applicazione devono essere aggiunte al modello di esperimento.

  • Nell'AZ mirato, gli Amazon EKS Pod in esecuzione su EC2 verranno terminati con i nodi di lavoro EC2 e l'avvio di nuovi nodi EC2 verrà bloccato. Tuttavia, gli Amazon EKS Pod in esecuzione su AWS Fargate non sono supportati.

  • Nell'AZ mirato, le attività di Amazon ECS in esecuzione su EC2 verranno terminate con i nodi di lavoro EC2 e l'avvio di nuovi nodi EC2 verrà bloccato. Tuttavia, le attività Amazon ECS in esecuzione su AWS Fargate non sono supportate.

  • Amazon RDS Multi-AZ con due istanze DB in standby leggibili non è supportato. In questo caso, le istanze verranno terminate, RDS eseguirà il failover e la capacità verrà immediatamente ripristinata nell'AZ interessato. Lo standby leggibile nell'AZ interessato rimarrà disponibile.

Requisiti

  • Aggiungi l'autorizzazione richiesta al ruolo dell' AWS FIS esperimento.

  • I tag delle risorse devono essere applicati alle risorse destinate all'esperimento. Questi possono utilizzare la tua convenzione di etichettatura o i tag predefiniti definiti nello scenario.

Permissions

ARC zonal autoshift utilizza un ruolo collegato al servizio IAM per eseguire lo spostamento zonale AWSServiceRoleForZonalAutoshiftPracticeRun per conto dell'utente. Questo ruolo utilizza la policy gestita da IAM. AWSZonalAutoshiftPracticeRunSLRPolicy Non è necessario creare il ruolo manualmente. Quando crei un modello di esperimento dallo scenario AZ Power Interruption in Console di gestione AWS, nel AWS CLI, o in un AWS SDK, ARC crea il ruolo collegato al servizio per te. Per ulteriori informazioni, vedere Utilizzo del ruolo collegato al servizio per lo spostamento automatico zonale in ARC.

La seguente policy concede ad AWS FIS le autorizzazioni necessarie per eseguire un esperimento con lo scenario. AZ Availability: Power Interruption Questa policy deve essere associata al ruolo dell'esperimento.

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

Contenuto dello scenario

Il seguente contenuto definisce lo scenario. Questo JSON può essere salvato e utilizzato per creare un modello di esperimento utilizzando il comando create-experiment-template dall'interfaccia a riga di comando di AWS (AWS CLI). Per la versione più recente dello scenario, visita la libreria degli scenari nella console 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." }