View a markdown version of this page

AZ : ralentissement des applications - AWS Service d'injection par défaut

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 : ralentissement des applications

Vous pouvez utiliser le scénario AZ : ralentissement des applications pour introduire une latence supplémentaire entre les ressources au sein d'une même zone de disponibilité (AZ). Cette latence est à l'origine de nombreux symptômes d'un ralentissement de l'application, d'une interruption partielle, parfois appelée panne grise. Il ajoute de la latence aux flux réseau entre les ressources cibles. Les flux réseau représentent le trafic entre les ressources informatiques, c'est-à-dire les paquets de données transportant des demandes, des réponses et d'autres communications entre vos serveurs, conteneurs et services. Le scénario peut aider à valider les configurations d'observabilité, à régler les seuils d'alarme, à découvrir la sensibilité des applications aux ralentissements et à prendre des décisions opérationnelles critiques, telles que l'évacuation AZ.

Par défaut, le scénario ajoute 200 ms de latence à 100 % des flux réseau entre les ressources cibles au sein de la zone de disponibilité sélectionnée pendant 30 minutes. Vous pouvez utiliser la boîte de dialogue Modifier les paramètres partagés de la console AWS FIS pour ajuster les paramètres suivants au niveau du scénario, qui s'appliquent ensuite aux actions sous-jacentes :

  • Zone de disponibilité : vous pouvez sélectionner la zone de disponibilité à modifier dans le scénario.

  • Millisecondes (ms) de latence : ajustez cette valeur en fonction de la sensibilité et des besoins de votre application. Vous pouvez réduire la latence pour les applications les plus sensibles ou augmenter pour tester la gestion des délais d'attente, par exemple. Envisagez d'utiliser des multiples de la latence actuelle de votre application comme référence.

  • Pourcentage de flux : réduire pour nuire à un sous-ensemble du trafic. Par exemple, vous pouvez ajouter une latence de 200 ms affectant 25 % des flux réseau pour des tests encore plus subtils.

  • Durée : définissez la durée de l'expérience. Vous pouvez raccourcir pour des tests plus rapides, ou effectuer des tests plus longs et soutenus. Par exemple, réglez la durée sur 2 heures pour tester vos mécanismes de récupération dans des conditions altérées.

  • Ciblage des ressources : vous pouvez définir les ressources cibles pour le scénario global à l'aide de balises (pour les instances EC2 ou les tâches ECS sur EC2 ou Fargate) ou d'étiquettes (pour les pods EKS sur EC2). Vous pouvez spécifier vos propres balises et étiquettes, ou utiliser les valeurs par défaut fournies dans le scénario. Si vous ne souhaitez pas utiliser de balises ou d'étiquettes, vous pouvez modifier l'action pour cibler les ressources en spécifiant d'autres paramètres.

  • Personnalisation : si vous ne souhaitez pas cibler les ressources EC2 ou ECS, vous pouvez conserver les balises par défaut pour les actions. L'expérience ne trouvera aucune ressource à cibler et l'action sera ignorée. Toutefois, si vous ne souhaitez pas cibler les ressources EKS, vous devez supprimer complètement l'action et la cible EKS du scénario, car cela nécessite la fourniture d'un identifiant de cluster EKS. Pour une personnalisation encore plus précise, vous pouvez modifier les actions individuelles directement dans le modèle d'expérience.

Actions

Ensemble, les actions suivantes contribuent à créer de nombreux symptômes d'un ralentissement des applications dans une seule zone de disponibilité en introduisant une latence supplémentaire sur les flux réseau, qui se propage ensuite dans l'application. Ces actions s'exécutent en parallèle, chacune ajoutant une latence de 200 ms pendant 30 minutes par défaut. Après cette période, la latence revient à des niveaux normaux. Le scénario nécessite au moins l'un des types de ressources suivants pour s'exécuter : instance EC2, tâche ECS ou pod EKS.

Latence du réseau ECS

AZ : Application Slowdown inclut https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#task-network-latency aws:ecs:task-network-latency pour introduire une latence pour les tâches ECS. L'action cible les tâches de l'AZ sélectionnée. Par défaut, il cible les tâches avec une balise nommée AZApplicationSlowdown avec une valeur deLatencyForECS. Vous pouvez remplacer la balise par défaut par la vôtre ou ajouter la balise de scénario à vos tâches. Si aucune tâche valide n'est trouvée, cette action sera ignorée. Avant de lancer une expérience sur ECS, vous devez suivre les étapes de configuration des actions de tâche ECS.

Latence du réseau EKS

AZ : Application Slowdown inclut https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-latency aws:eks:pod-network-latency pour introduire de la latence pour les pods EKS. L'action cible les modules de la zone de zone de zone de zone sélectionnée. Par défaut, il cible les pods d'un cluster dont les étiquettes sont au format key=value. L'étiquette par défaut fournie estAZApplicationSlowdown=LatencyForEKS. Vous pouvez remplacer l'étiquette par défaut par la vôtre ou ajouter cette étiquette à vos pods. Si aucun module valide n'est trouvé, cette action sera ignorée. Avant de lancer une expérience sur EKS, vous devez suivre les étapes de configuration des actions du pod EKS.

Latence du réseau EC2

AZ : Application Slowdown utilise l'action aws:ssm:send-command pour exécuter le AWSFIS-Run-Network-Latency-Sources document afin d'introduire une latence pour les instances EC2. L'action cible les instances de l'AZ sélectionnée. Par défaut, il cible les instances avec une balise nommée AZApplicationSlowdown avec une valeur deLatencyForEC2. Vous pouvez remplacer la balise par défaut par la vôtre ou ajouter cette balise à vos instances. Si aucune instance valide n'est trouvée, cette action sera ignorée. Avant de lancer une expérience sur EC2 à l'aide de SSM, vous devez configurer l'agent AWS Systems Manager.

Limitations

  • 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.

Exigences

  • Ajoutez les autorisations requises au rôle d'expérimentation AWS FIS.

  • Vous devez cibler une ou plusieurs ressources de l'un des 3 types suivants au sein de l'AZ sélectionnée : instances EC2, tâches ECS ou pods EKS.

  • Toutes les cibles du scénario doivent se trouver dans le même VPC.

Permissions

Pour exécuter ce scénario, vous avez besoin d'un rôle IAM doté d'une politique de confiance qui permet au FIS d'assumer le rôle et les politiques gérées pour les types de ressources que vous ciblez dans le cadre de l'expérience : EC2, ECS et EKS. Lorsque vous créez un modèle de test à partir du scénario de ralentissement des applications de A à Z, FIS crée le rôle pour vous avec la politique de confiance et les politiques gérées par AWS suivantes :

Si vous utilisez un rôle IAM existant pour exécuter le scénario AZ : Application Slowdown, vous pouvez joindre la politique suivante pour accorder à AWS FIS les autorisations nécessaires :

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

Contenu du scénario

Le contenu suivant définit le scénario. Ce JSON peut être enregistré et utilisé pour créer un modèle d'expérience à l'aide de la commande create-experiment-template depuis l'interface de ligne de commande AWS (AWS CLI). Pour accéder à la version la plus récente du scénario, consultez la bibliothèque de scénarios de la console FIS et accédez à l'onglet Contenu.

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