View a markdown version of this page

AZ: Ralentización de las aplicaciones - AWS Servicio de inyección de fallos

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: Ralentización de las aplicaciones

Puede utilizar el escenario AZ: ralentización de las aplicaciones para introducir una latencia adicional entre los recursos de una única zona de disponibilidad (AZ). Esta latencia crea muchos de los síntomas de una ralentización de las aplicaciones, es decir, una interrupción parcial, a veces denominada fallo gris. Añade latencia a los flujos de red entre los recursos de destino. Los flujos de red representan el tráfico entre los recursos informáticos, es decir, los paquetes de datos que transportan las solicitudes, las respuestas y otras comunicaciones entre los servidores, los contenedores y los servicios. El escenario puede ayudar a validar las configuraciones de observabilidad, ajustar los umbrales de alarma, descubrir la sensibilidad de las aplicaciones ante las ralentizaciones y tomar decisiones operativas críticas, como la evacuación de zonas de acceso rápido.

De forma predeterminada, el escenario añade 200 ms de latencia al 100% de los flujos de red entre los recursos de destino dentro de la zona de disponibilidad seleccionada durante 30 minutos. Puede usar el cuadro de diálogo Editar parámetros compartidos de la consola de AWS FIS para ajustar los siguientes parámetros a nivel de escenario, que luego se aplicarán a las acciones subyacentes:

  • Zona de disponibilidad: puede seleccionar la zona de disponibilidad que desea modificar en el escenario.

  • Milisegundos (ms) de latencia: ajústelo en función de la sensibilidad y las necesidades de su aplicación. Puedes establecer una latencia más baja para las aplicaciones más sensibles o más alta para probar la gestión del tiempo de espera, por ejemplo. Considera la posibilidad de usar múltiplos de la latencia actual de tus aplicaciones como base.

  • Porcentaje de flujos: redúzcalo para reducir un subconjunto del tráfico. Por ejemplo, puedes añadir una latencia de 200 ms que afecte al 25% de los flujos de la red para realizar pruebas aún más sutiles.

  • Duración: establece la duración del experimento. Puede acortarla para que las pruebas sean más rápidas o ejecutar pruebas sostenidas más largas. Por ejemplo, establece la duración en 2 horas para probar tus mecanismos de recuperación en condiciones deficientes.

  • Segmentación de recursos: puede definir los recursos objetivo para el escenario general mediante etiquetas (para las instancias EC2 o las tareas de ECS en EC2 o Fargate) o etiquetas (para los pods de EKS en EC2). Puedes especificar tus propias etiquetas y etiquetas o usar los valores predeterminados que se proporcionan en el escenario. Si no deseas usar etiquetas o rótulos, puedes editar la acción para segmentar los recursos especificando otros parámetros.

  • Personalización: si no desea centrarse en los recursos de EC2 o ECS, puede dejar las acciones con las etiquetas predeterminadas. El experimento no encontrará ningún recurso al que dirigirse y se omitirá la acción. Sin embargo, si no quiere centrarse en los recursos de EKS, debe eliminar completamente la acción y el objetivo de EKS del escenario, ya que es necesario proporcionar un identificador de clúster de EKS. Para una personalización aún más detallada, puede modificar directamente las acciones individuales en la plantilla del experimento.

Acciones

En conjunto, las siguientes acciones ayudan a crear muchos de los síntomas de una ralentización de una aplicación en una sola zona de disponibilidad, al introducir una latencia adicional en los flujos de la red, que luego se propaga por la aplicación. Estas acciones se ejecutan en paralelo y cada una añade una latencia de 200 ms durante 30 minutos de forma predeterminada. Transcurrido este período, la latencia vuelve a los niveles normales. El escenario necesita al menos uno de los siguientes tipos de recursos para ejecutarse: instancia EC2, tarea ECS o pod EKS.

Latencia de red ECS

AZ: Application Slowdown incluye https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#task-network-latency aws:ecs:task-network-latency para introducir la latencia en las tareas de ECS. La acción se centra en las tareas de la zona de disponibilidad seleccionada. De forma predeterminada, se dirige a las tareas con una etiqueta cuyo nombre AZApplicationSlowdown tiene un valor deLatencyForECS. Puedes reemplazar la etiqueta predeterminada por la tuya propia o añadir la etiqueta de escenario a tus tareas. Si no se encuentra ninguna tarea válida, se omitirá esta acción. Antes de ejecutar un experimento en ECS, debe seguir los pasos de configuración para las acciones de las tareas de ECS.

Latencia de red EKS

AZ: Application Slowdown incluye https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-latency aws:eks:pod-network-latency para introducir la latencia en los pods de EKS. La acción se dirige a los pods de la AZ seleccionada. De forma predeterminada, se dirige a los pods de un clúster que tienen etiquetas con el formato key=value. La etiqueta predeterminada que se proporciona es. AZApplicationSlowdown=LatencyForEKS Puedes reemplazar la etiqueta predeterminada por la tuya propia o añadir esta etiqueta a tus pods. Si no se encuentra ningún pod válido, se omitirá esta acción. Antes de ejecutar un experimento en EKS, debe seguir los pasos de configuración de las acciones del pod de EKS.

Latencia de red EC2

AZ: Application Slowdown utiliza la acción aws:ssm:send-command para ejecutar el documento y así introducir la AWSFIS-Run-Network-Latency-Sources latencia en las instancias EC2. La acción se dirige a las instancias de la zona de disponibilidad seleccionada. De forma predeterminada, se dirige a las instancias con una etiqueta cuyo nombre AZApplicationSlowdown tiene un valor deLatencyForEC2. Puedes reemplazar la etiqueta predeterminada por la tuya propia o agregar esta etiqueta a tus instancias. Si no se encuentran instancias válidas, se omitirá esta acción. Antes de ejecutar un experimento en EC2 con SSM, debe configurar el agente de AWS Systems Manager.

Limitaciones

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

Requisitos

  • Añada los permisos necesarios a la función de experimento de AWS FIS.

  • Debe seleccionar uno o más recursos de cualquiera de los tres tipos siguientes en la zona de disponibilidad seleccionada: instancias EC2, tareas de ECS o pods de EKS.

  • Todos los objetivos del escenario deben estar en la misma VPC.

Permisos

Para ejecutar este escenario, necesita un rol de IAM con una política de confianza que permita a FIS asumir el rol y las políticas administradas para los tipos de recursos a los que se dirige el experimento: EC2, ECS y EKS. Al crear una plantilla de experimento a partir del escenario AZ: Application Slowdown, FIS crea el rol automáticamente con la política de confianza y las siguientes políticas administradas por AWS:

Si utiliza una función de IAM existente para ejecutar el escenario AZ: Application Slowdown, puede adjuntar la siguiente política para conceder a AWS FIS los permisos necesarios:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeTasks", "Effect": "Allow", "Action": "ecs:DescribeTasks", "Resource": "*" }, { "Sid": "DescribeContainerInstances", "Effect": "Allow", "Action": "ecs:DescribeContainerInstances", "Resource": "arn:aws:ecs:*:*:container-instance/*/*" }, { "Sid": "DescribeInstances", "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Sid": "DescribeSubnets", "Effect": "Allow", "Action": "ec2:DescribeSubnets", "Resource": "*" }, { "Sid": "DescribeCluster", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:*:*:cluster/*" }, { "Sid": "TargetResolutionByTags", "Effect": "Allow", "Action": "tag:GetResources", "Resource": "*" }, { "Sid": "SendCommand", "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:managed-instance/*", "arn:aws:ssm:*:*:document/*" ] }, { "Sid": "ListCommands", "Effect": "Allow", "Action": [ "ssm:ListCommands" ], "Resource": "*" }, { "Sid": "CancelCommand", "Effect": "Allow", "Action": [ "ssm:CancelCommand" ], "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 obtener la versión más reciente del escenario, visite la biblioteca de escenarios de la consola FIS y vaya a la pestaña Contenido.

{ "tags": { "Name": "AZ: Application Slowdown" }, "description": "Add latency between resources within a single AZ.", "actions": { "LatencyForEKS": { "actionId": "aws:eks:pod-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "interface": "DEFAULT", "kubernetesServiceAccount": "fis-service-account", "sources": "us-east-1a" }, "targets": { "Pods": "TargetsForEKS" } }, "LatencyForEC2": { "actionId": "aws:ssm:send-command", "parameters": { "duration": "PT30M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Latency-Sources", "documentParameters": "{\"DelayMilliseconds\":\"200\",\"Sources\":\"us-east-1a\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}" }, "targets": { "Instances": "TargetsForEC2" } }, "LatencyForECS": { "actionId": "aws:ecs:task-network-latency", "parameters": { "delayMilliseconds": "200", "duration": "PT30M", "flowsPercent": "100", "installDependencies": "true", "sources": "us-east-1a", "useEcsFaultInjectionEndpoints": "true" }, "targets": { "Tasks": "TargetsForECS" }, "startAfter": [] } }, "targets": { "TargetsForEKS": { "parameters": { "availabilityZoneIdentifier": "us-east-1a", "clusterIdentifier": "", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "AZApplicationSlowdown=LatencyForEKS" }, "resourceType": "aws:eks:pod", "selectionMode": "ALL" }, "TargetsForEC2": { "filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForEC2" }, "resourceType": "aws:ec2:instance", "selectionMode": "ALL" }, "TargetsForECS": { "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "AZApplicationSlowdown": "LatencyForECS" }, "resourceType": "aws:ecs:task", "selectionMode": "ALL" } }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "stopConditions": [ { "source": "none" } ] }