AZ Availability: Power Interruption - AWS Servicio de inyección de averías

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

AZ Availability: Power Interruption

Puede utilizar el escenario AZ Availability: Power Interruption para provocar los síntomas esperados de una interrupción total del suministro eléctrico en una zona de disponibilidad (AZ).

Este escenario se puede utilizar para demostrar que las aplicaciones con varias AZ funcionan según lo esperado en una interrupción completa del suministro eléctrico en zonas de disponibilidad. Incluye la pérdida de procesamiento zonal (Amazon EC2, EKS y ECS), la falta de cambio de escala del procesamiento en la zona de disponibilidad, la pérdida de conectividad de subred, la conmutación por error de RDS, la conmutación por error ElastiCache y los volúmenes de EBS que no responden. De forma predeterminada, se omiten las acciones para las que no se encuentre ningún objetivo.

Acciones

En conjunto, las siguientes acciones crean muchos de los síntomas esperados en una interrupción total del suministro eléctrico en una única AZ. Disponibilidad AZ: la interrupción del suministro eléctrico solo afecta a los servicios que se espera que se vean afectados en una interrupción del suministro eléctrico de la AZ. De forma predeterminada, el escenario inyecta síntomas de interrupción del suministro eléctrico durante 30 minutos y, a continuación, durante otros 30 minutos, inyecta síntomas que pueden presentarse durante la recuperación.

Stop-Instances

En una interrupción del suministro eléctrico de la AZ, las instancias de EC2 de la AZ afectada se cerrarán. Una vez restablecido el suministro, las instancias se reiniciarán. AZ Availability: Power Interruption incluye aws:ec2:stop-instances para detener todas las instancias de la AZ afectada durante el tiempo que dure la interrupción. Transcurrido ese tiempo, las instancias se reinician. Al detener las instancias de EC2 administradas por Amazon EKS, se eliminan los pods de EKS dependientes. Al detener las instancias de EC2 administradas por Amazon ECS, se detienen las tareas de ECS dependientes.

El objetivo de esta acción son las instancias de EC2 que se ejecutan en la AZ afectada. De forma predeterminada, su objetivo son las instancias con una etiqueta AzImpairmentPower que tiene un valor de StopInstances. Puede agregar esta etiqueta a sus instancias o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran instancias válidas, se omitirá esta acción.

Stop-ASG-Instances

En una interrupción del suministro eléctrico AZ, las instancias de EC2 administradas por un grupo de escalado automático de la AZ afectada se cerrarán. Una vez restablecido el suministro, las instancias se reiniciarán. AZ Availability: Power Interruption incluye aws:ec2:stop-instances para detener todas las instancias, incluidas las administradas por escalado automático, de la AZ afectada durante el tiempo que dure la interrupción. Transcurrido ese tiempo, las instancias se reinician.

El objetivo de esta acción son las instancias de EC2 que se ejecutan en la AZ afectada. De forma predeterminada, su objetivo son las instancias con una etiqueta AzImpairmentPower que tiene un valor de IceAsg. Puede agregar esta etiqueta a sus instancias o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran instancias válidas, se omitirá esta acción.

Pausa de lanzamientos de instancias

Durante una interrupción del suministro eléctrico de la AZ se producirán errores en las llamadas a la API de EC2 para aprovisionar capacidad en la AZ. En particular, se verán afectadas las siguientes API: ec2:StartInstances, ec2:CreateFleet y ec2:RunInstances. AZ Availability: Power Interruption includes incluye aws:ec2:api-insufficient-instance-capacity-error para evitar que se aprovisionen nuevas instancias en la AZ afectada.

El objetivo de esta acción son los roles de IAM que se utilizan para aprovisionar instancias. Debe hacerse referencia a estos mediante un ARN. De forma predeterminada, si no se encuentran roles de IAM válidos, se omitirá esta acción.

Pausa del escalado de ASG

Durante una interrupción del suministro eléctrico de la AZ fallarán las llamadas a la API de EC2 realizadas por el plano de control de escalado automático para recuperar la capacidad perdida en la AZ. En particular, se verán afectadas las siguientes API: ec2:StartInstances, ec2:CreateFleet y ec2:RunInstances. AZ Availability: Power Interruption incluye aws:ec2:asg-insufficient-instance-capacity-error para evitar que se aprovisionen nuevas instancias en la AZ afectada. Esto también impide que Amazon EKS y Amazon ECS se escalen en la AZ afectada.

El objetivo de esta acción son los grupos de escalado automático. De forma predeterminada, su objetivo son los grupos de escalado automático con una etiqueta AzImpairmentPower que tiene un valor de IceAsg. Puede agregar esta etiqueta a sus grupos de escalado automático o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran grupos de escalado automático válidos, se omitirá esta acción.

Pausa de conectividad de red

Durante una interrupción del suministro eléctrico de la AZ, la red no estará disponible en la AZ. Cuando esto ocurre, algunos servicios de AWS pueden tardar unos minutos en actualizar DNS para reflejar que los puntos de conexión privados de la AZ afectada no están disponibles. En este tiempo es posible que las búsquedas de DNS devuelvan direcciones IP inaccesibles. AZ Availability: Power Interruption incluye aws:network:disrupt-connectivity para bloquear toda la conectividad de red de todas las subredes de la AZ afectada durante 2 minutos. Esto provocará tiempos de espera y actualizaciones de DNS para la mayoría de las aplicaciones. Si se pone fin a la acción transcurridos 2 minutos, se podrá recuperar posteriormente el DNS de servicio regional mientras la AZ sigue sin estar disponible.

El objetivo de esta acción son las subredes. De forma predeterminada, su objetivo son los clústeres con una etiqueta AzImpairmentPower que tiene un valor de DisruptSubnet. Puede agregar esta etiqueta a sus subredes o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran subredes válidas, se omitirá esta acción.

RDS de conmutación por error

En una interrupción del suministro eléctrico AZ, los nodos RDS de la AZ afectada se cerrarán. Los nodos AZ RDS únicos de la AZ afectada no estarán disponibles por completo. En el caso de clústeres con varias AZ, el nodo escritor realizará una conmutación por error a una AZ no afectada y los nodos lectores de la AZ afectada no estarán disponibles. En el caso de clústeres con varias AZ, AZ Availability: Power Interruption incluye aws:rds:failover-db-cluster para realizar conmutación por error si el escritor se encuentra en la AZ afectada.

El objetivo de esta acción son los clústeres de RDS. De forma predeterminada, su objetivo son los clústeres con una etiqueta AzImpairmentPower que tiene un valor de DisruptRds. Puede agregar esta etiqueta a sus clústeres o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran clústeres válidos, se omitirá esta acción.

Pausa Redis ElastiCache

Durante una interrupción del suministro eléctrico en la AZ, ElastiCache los nodos de la AZ no están disponibles. AZ Availability: Power Interruptionincluye aws:elasticache:interrupt-cluster-az-power para terminar los nodos de la AZ afectada. ElastiCache Mientras dure la interrupción, no se aprovisionarán nuevas instancias en la AZ afectada, por lo que el clúster se mantendrá con capacidad reducida.

Esta acción se dirige a los clústeres. ElastiCache De forma predeterminada, su objetivo son los clústeres con una etiqueta AzImpairmentPower que tiene un valor de ElasticacheImpact. Puede agregar esta etiqueta a sus clústeres o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran clústeres válidos, se omitirá esta acción. Tenga en cuenta que solo los clústeres con nodos escritores en la AZ afectada se considerarán objetivos válidos.

Pausa de E/S de EBS

Tras una interrupción del suministro eléctrico de la AZ, una vez restablecido el suministro, es posible que un porcentaje muy pequeño de instancias experimente volúmenes de EBS que no responden. AZ Availability: Power Interruption incluye aws:ebs:pause-io para dejar 1 volumen de EBS en un estado de no respuesta.

De forma predeterminada, solo se seleccionan los volúmenes configurados para persistir una vez terminada la instancia. El objetivo de esta acción son los volúmenes con una etiqueta AzImpairmentPower que tiene un valor de APIPauseVolume. Puede agregar esta etiqueta a sus volúmenes o reemplazar la etiqueta predeterminada por la suya propia en la plantilla de experimento. De forma predeterminada, si no se encuentran volúmenes válidos, se omitirá esta acción.

Limitaciones

  • Este escenario no incluye condiciones de parada. Deben agregarse a la plantilla de experimento las condiciones de parada correctas para su aplicación.

  • No se admiten pods de Amazon EKS que se ejecutan en AWS Fargate.

  • No se admiten tareas de Amazon ECS que se ejecutan en AWS Fargate.

  • No se admite Amazon RDS Multi-AZ con dos instancias de base de datos en espera legibles. En este caso, las instancias se terminarán, RDS realizará conmutación por error y la capacidad se volverá a aprovisionar inmediatamente en la AZ afectada. La espera legible en la AZ afectada seguirá disponible.

Requisitos

  • Agregue el permiso necesario al rol de experimento de AWS FIS.

  • Se deben aplicar etiquetas de recursos a recursos que no son el objetivo del experimento. Pueden ser etiquetas que usen su propia convención de etiquetado o etiquetas predeterminadas definidas en el escenario.

Permisos

La siguiente política otorga a AWS FIS los permisos necesarios para ejecutar un experimento con el escenario AZ Availability: Power Interruption. Esta política debe estar asociada al rol de experimento.

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

Contenido del escenario

El siguiente contenido define el escenario. Este JSON se puede guardar y usar para crear una plantilla de experimento mediante el comando create-experiment-template de la interfaz de la línea de comandos de AWS (AWS CLI). Para ver la versión más reciente del escenario, visite la biblioteca de escenarios de la consola de 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." }