Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AZ Availability: Power Interruption
Vous pouvez utiliser le plugin AZ Availability: Power Interruption scénario pour induire les symptômes attendus d'une interruption complète de l'alimentation dans une zone de disponibilité (AZ).
Ce scénario peut être utilisé pour démontrer que les applications multi-AZ fonctionnent comme prévu lors d'une seule coupure de courant AZ complète. Cela inclut la perte de calcul zonal (AmazonEC2, etECS)EKS, l'absence de redimensionnement du calcul dans l'AZ, la perte de connectivité des sous-réseaux, le basculement, le RDS basculement sur incident et les volumes qui ne ElastiCache répondent pas. EBS Par défaut, les actions pour lesquelles aucune cible n'a été trouvée seront ignorées.
Actions
Ensemble, les actions suivantes créent bon nombre des symptômes attendus d'une coupure de courant complète dans un seul AZ. Disponibilité de la zone AZ : L'interruption de courant n'affecte que les services qui devraient subir un impact lors d'une seule interruption de courant de la zone AZ. Par défaut, le scénario injecte les symptômes de coupure de courant pendant 30 minutes, puis, pendant 30 minutes supplémentaires, les symptômes susceptibles de survenir pendant le rétablissement.
Arrêter les instances
Lors d'une coupure de courant de l'AZ, les EC2 instances de l'AZ affectée s'éteignent. Une fois l'alimentation rétablie, les instances redémarrent. AZ Availability: Power Interruption inclut aws:ec2:stop-instances pour arrêter toutes les instances de l'AZ affectée pendant la durée de l'interruption. Après cette durée, les instances sont redémarrées. L'arrêt EC2 des instances gérées par Amazon EKS entraîne la suppression EKS des pods dépendants. L'arrêt EC2 des instances gérées par Amazon ECS entraîne l'arrêt ECS des tâches dépendantes.
Cette action cible les EC2 instances exécutées dans l'AZ affectée. Par défaut, il cible les instances dotées d'une balise nommée AzImpairmentPower
avec une valeur deStopInstances
. Vous pouvez ajouter cette balise à vos instances ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucune instance valide n'est trouvée, cette action sera ignorée.
Arrêter- ASG -Instances
Lors d'une coupure de courant de la zone AZ, EC2 les instances gérées par un groupe Auto Scaling dans la zone de distribution affectée s'arrêteront. Une fois l'alimentation rétablie, les instances redémarrent. AZ Availability: Power Interruption inclut aws:ec2:stop-instances pour arrêter toutes les instances, y compris celles gérées par Auto Scaling, dans l'AZ concernée pendant la durée de l'interruption. Après cette durée, les instances sont redémarrées.
Cette action cible les EC2 instances exécutées dans l'AZ affectée. Par défaut, il cible les instances dotées d'une balise nommée AzImpairmentPower
avec une valeur deIceAsg
. Vous pouvez ajouter cette balise à vos instances ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucune instance valide n'est trouvée, cette action sera ignorée.
Interrompre les lancements d'instances
Lors d'une coupure de courant dans l'AZ, EC2 API les appels visant à fournir de la capacité dans l'AZ échoueront. En particulier, les éléments suivants APIs seront affectés : ec2:StartInstances
ec2:CreateFleet
, etec2:RunInstances
. AZ Availability: Power Interruption includes inclut aws:ec2 : api-insufficient-instance-capacity -error pour empêcher le provisionnement de nouvelles instances dans l'AZ concernée.
Cette action cible les IAM rôles utilisés pour approvisionner des instances. Ceux-ci doivent être ciblés à l'aide d'unARN. Par défaut, si aucun IAM rôle valide n'est trouvé, cette action sera ignorée.
Suspendre le ASG dimensionnement
Lors d'une coupure de courant dans l'AZ, les EC2 API appels passés par le plan de contrôle Auto Scaling pour récupérer la capacité perdue dans l'AZ échoueront. En particulier, les éléments suivants APIs seront affectés : ec2:StartInstances
ec2:CreateFleet
, etec2:RunInstances
. AZ Availability: Power Interruption inclut aws:ec2 : asg-insufficient-instance-capacity -error pour empêcher le provisionnement de nouvelles instances dans l'AZ concernée. Cela empêche également Amazon EKS et Amazon ECS de procéder à une mise à l'échelle dans l'AZ concernée.
Cette action cible les groupes Auto Scaling. Par défaut, il cible les groupes Auto Scaling dotés d'une balise nommée AzImpairmentPower
avec une valeur deIceAsg
. Vous pouvez ajouter cette balise à vos groupes Auto Scaling ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucun groupe Auto Scaling valide n'est trouvé, cette action sera ignorée.
Suspendre la connectivité réseau
Lors d'une coupure de courant de l'AZ, le réseau de l'AZ ne sera pas disponible. Dans ce cas, la mise à jour DNS de certains AWS services peut prendre jusqu'à quelques minutes afin de refléter le fait que les points de terminaison privés de l'AZ concernée ne sont pas disponibles. Pendant ce temps, les DNS recherches peuvent renvoyer des adresses IP inaccessibles. AZ Availability: Power Interruption inclut aws:network:disrupt-connectivity pour bloquer toute connectivité réseau pour tous les sous-réseaux de l'AZ affectée pendant 2 minutes. Cela forcera des délais d'expiration et des DNS actualisations pour la plupart des applications. La fin de l'action au bout de 2 minutes permet de rétablir ultérieurement le service régional DNS alors que l'AZ continue d'être indisponible.
Cette action cible les sous-réseaux. Par défaut, il cible les clusters dotés d'une balise nommée AzImpairmentPower
avec une valeur deDisruptSubnet
. Vous pouvez ajouter cette balise à vos sous-réseaux ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucun sous-réseau valide n'est trouvé, cette action sera ignorée.
Basculement RDS
Lors d'une coupure de courant de la zone AZ, les RDS nœuds de la zone AZ affectée s'arrêteront. RDSLes nœuds AZ uniques de la zone AZ affectée seront totalement indisponibles. Pour les clusters multi-AZ, le nœud d'écriture basculera vers une zone de zone non affectée et les nœuds de lecture de la zone de référence affectée ne seront pas disponibles. Pour les clusters multi-AZ, AZ Availability: Power Interruption inclut aws:rds : failover-db-cluster pour basculer si le rédacteur se trouve dans l'AZ concerné.
Cette action cible les RDS clusters. Par défaut, il cible les clusters dotés d'une balise nommée AzImpairmentPower
avec une valeur deDisruptRds
. Vous pouvez ajouter cette balise à vos clusters ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucun cluster valide n'est trouvé, cette action sera ignorée.
Suspendre ElastiCache Redis
Lors d'une coupure de courant AZ, ElastiCache les nœuds de l'AZ ne sont pas disponibles. AZ Availability: Power Interruption inclut aws:elasticache : interrupt-cluster-az-power pour terminer les ElastiCache nœuds de l'AZ affectée. Pendant la durée de l'interruption, aucune nouvelle instance ne sera mise en service dans l'AZ concernée, de sorte que le cluster restera à capacité réduite.
Cette action cible les ElastiCache clusters. Par défaut, il cible les clusters dotés d'une balise nommée AzImpairmentPower
avec une valeur deElasticacheImpact
. Vous pouvez ajouter cette balise à vos clusters ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucun cluster valide n'est trouvé, cette action sera ignorée. Notez que seuls les clusters dont les nœuds d'écriture se trouvent dans l'AZ affectée seront considérés comme des cibles valides.
Interrompre les EBS E/S
Après une coupure de courant AZ, une fois l'alimentation rétablie, un très faible pourcentage d'instances peut rencontrer des EBS volumes qui ne répondent pas. AZ Availability: Power Interruption inclut aws:ebs:pause-io pour laisser un volume sans réponse. EBS
Par défaut, seuls les volumes définis pour persister après la fermeture de l'instance sont ciblés. Cette action cible les volumes dotés d'une balise nommée AzImpairmentPower
avec une valeur deAPIPauseVolume
. Vous pouvez ajouter cette balise à vos volumes ou remplacer la balise par défaut par votre propre balise dans le modèle d'expérience. Par défaut, si aucun volume valide n'est trouvé, cette action sera ignorée.
Limites
-
Ce scénario n'inclut pas les conditions d'arrêt. Les conditions d'arrêt correctes pour votre application doivent être ajoutées au modèle d'expérience.
-
Dans l'AZ cible, les Amazon EKS Pods en cours d'exécution EC2 seront interrompus avec EC2 des nœuds de travail et le démarrage de nouveaux EC2 nœuds sera bloqué. Toutefois, les Amazon EKS Pods exécutés sur AWS Fargate ne sont pas pris en charge.
-
Dans l'AZ ciblée, les ECS tâches Amazon en cours d'exécution EC2 seront interrompues avec EC2 les nœuds de travail et le démarrage de nouveaux EC2 nœuds sera bloqué. Toutefois, les ECS tâches Amazon exécutées sur AWS Fargate ne sont pas prises en charge.
-
Amazon RDS Multi-AZ avec deux instances de base de données de secours lisibles n'est pas pris en charge. Dans ce cas, les instances seront résiliées, RDS basculeront sur incident et la capacité sera immédiatement rétablie dans l'AZ concernée. Le mode veille lisible dans l'AZ concerné restera disponible.
Prérequis
-
Ajoutez l'autorisation requise au rôle AWS FIS d'expérience.
-
Les balises de ressources doivent être appliquées aux ressources qui doivent être ciblées par l'expérience. Ils peuvent utiliser votre propre convention de balisage ou les balises par défaut définies dans le scénario.
Autorisations
La politique suivante accorde AWS FIS les autorisations nécessaires pour exécuter une expérience avec le AZ Availability: Power Interruption scénario. Cette politique doit être associée au rôle d'expérimentation.
{ "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": [ "*" ] } ] }
Contenu du scénario
Le contenu suivant définit le scénario. Cela JSON peut être enregistré et utilisé pour créer un modèle d'expérience à l'aide de la create-experiment-template
{ "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." }