AZ: Application Slowdown - AWS Servizio di iniezione dei 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à.

AZ: Application Slowdown

È possibile utilizzare lo scenario AZ: Application Slowdown per introdurre una latenza aggiuntiva tra le risorse all'interno di una singola zona di disponibilità (AZ). Questa latenza crea molti dei sintomi di un rallentamento dell'applicazione, un'interruzione parziale, a volte nota come errore grigio. Aggiunge latenza ai flussi di rete tra le risorse di destinazione. I flussi di rete rappresentano il traffico tra le risorse di elaborazione, ovvero i pacchetti di dati che trasportano richieste, risposte e altre comunicazioni tra server, contenitori e servizi. Lo scenario può aiutare a convalidare le configurazioni di osservabilità, regolare le soglie di allarme, scoprire la sensibilità delle applicazioni ai rallentamenti e prendere decisioni operative critiche come l'evacuazione dalla zona di emergenza.

Per impostazione predefinita, lo scenario aggiunge 200 ms di latenza al 100% dei flussi di rete tra le risorse di destinazione all'interno della AZ selezionata per una durata di 30 minuti. Puoi utilizzare la finestra di dialogo Modifica parametri condivisi nella console AWS FIS per regolare i seguenti parametri a livello di scenario, che poi si applicano alle azioni sottostanti:

  • Zona di disponibilità: puoi selezionare l'AZ da compromettere nello scenario.

  • Millisecondi (ms) di latenza: regolala in base alla sensibilità e alle esigenze dell'applicazione. È possibile impostare una latenza inferiore per le applicazioni più sensibili o superiore per testare la gestione del timeout, ad esempio. Prendi in considerazione l'utilizzo di multipli della latenza attuale delle applicazioni come riferimento di base.

  • Percentuale dei flussi: riduci per compromettere un sottoinsieme di traffico. Ad esempio, puoi aggiungere una latenza di 200 ms che influisce sul 25% dei flussi di rete per test ancora più sottili.

  • Durata: imposta la durata dell'esperimento. Puoi abbreviarlo per test più rapidi o eseguire test prolungati più lunghi. Ad esempio, imposta la durata su 2 ore per testare i meccanismi di recupero in condizioni compromesse.

  • Targeting delle risorse: puoi definire le risorse target per lo scenario generale utilizzando tag (per EC2 istanze o attività ECS su o EC2 Fargate) o etichette (per i pod EKS attivi). EC2 È possibile specificare tag ed etichette personalizzati o utilizzare i valori predefiniti forniti nello scenario. Se non desideri utilizzare tag o etichette, puoi modificare l'azione per indirizzare le risorse specificando altri parametri.

  • Personalizzazione: se non desideri utilizzare risorse target EC2 o ECS, puoi lasciare le azioni con i tag predefiniti. L'esperimento non troverà alcuna risorsa da indirizzare e l'azione verrà ignorata. Tuttavia, se non si desidera utilizzare come target le risorse EKS, è necessario rimuovere completamente l'azione e il target EKS dallo scenario, poiché è necessario fornire un identificatore del cluster EKS. Per una personalizzazione ancora più granulare, puoi modificare direttamente le singole azioni nel modello di esperimento.

Azioni

Insieme, le azioni seguenti aiutano a creare molti dei sintomi di rallentamento di un'applicazione in una singola AZ introducendo una latenza aggiuntiva sui flussi di rete, che poi si propaga attraverso l'applicazione. Queste azioni vengono eseguite in parallelo, ognuna delle quali aggiunge una latenza di 200 ms per 30 minuti per impostazione predefinita. Dopo questo periodo, la latenza torna ai livelli normali. Lo scenario richiede almeno uno dei seguenti tipi di risorse per l'esecuzione: EC2 istanza, task ECS o pod EKS.

Latenza di rete ECS

AZ: Application Slowdown include aws:ecs: task-network-latency per introdurre la latenza per le attività ECS. L'azione si rivolge alle attività nella AZ selezionata. Per impostazione predefinita, si rivolge alle attività con un tag denominato AZApplicationSlowdown con un valore diLatencyForECS. Puoi sostituire il tag predefinito con il tuo o aggiungere il tag scenario alle tue attività. Se non viene trovata alcuna attività valida, questa azione verrà ignorata. Prima di eseguire un esperimento su ECS, è necessario seguire i passaggi di configurazione per le azioni delle attività ECS.

Latenza di rete EKS

AZ: Application Slowdown include aws:eks: pod-network-latency per introdurre la latenza per i pod EKS. L'azione si rivolge ai pod nella AZ selezionata. Per impostazione predefinita, si rivolge ai pod all'interno di un cluster che hanno etichette con il formato key=value. L'etichetta predefinita fornita è. AZApplicationSlowdown=LatencyForEKS Puoi sostituire l'etichetta predefinita con la tua o aggiungere questa etichetta ai tuoi pod. Se non vengono trovati pod validi, questa azione verrà ignorata. Prima di eseguire un esperimento su EKS, è necessario seguire i passaggi di configurazione per le azioni dei pod EKS.

EC2 Latenza di rete

AZ: Application Slowdown utilizza l'azione aws:ssm:send-command per eseguire il documento -Network-Latency-Sources per introdurre la latenza per le istanze. AWSFIS-Run EC2 L'azione si rivolge alle istanze nella AZ selezionata. Per impostazione predefinita, si rivolge alle istanze con un tag denominato AZApplicationSlowdown con un valore di. LatencyForEC2 Puoi sostituire il tag predefinito con il tuo o aggiungere questo tag alle tue istanze. Se non vengono trovate istanze valide, questa azione verrà ignorata. Prima di eseguire un esperimento sull' EC2 uso di SSM, devi configurare l'agente AWS Systems Manager.

Limitazioni

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

Requisiti

  • Aggiungi le autorizzazioni richieste al ruolo dell'esperimento AWS FIS.

  • È necessario indirizzare una o più risorse da uno dei seguenti 3 tipi all'interno della AZ selezionata: EC2 istanze, attività ECS o pod EKS.

  • Tutte le destinazioni dello scenario devono trovarsi nello stesso VPC.

Permissions

Per eseguire questo scenario è necessario un ruolo IAM con una policy di fiducia che consenta a FIS di assumere il ruolo e le policy gestite per i tipi di risorse scelti nell'esperimento: EC2 ECS ed EKS. Quando crei un modello di esperimento dallo scenario AZ: Application Slowdown, FIS crea il ruolo per te con la policy di fiducia e le seguenti policy gestite da AWS:

Se utilizzi un ruolo IAM esistente per eseguire lo scenario AZ: Application Slowdown, puoi allegare la seguente policy per concedere ad AWS FIS le autorizzazioni necessarie:

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

Contenuto dello scenario

Il seguente contenuto definisce lo scenario. Questo codice JSON può essere salvato e utilizzato per creare un modello di esperimento utilizzando il create-experiment-templatecomando dell'AWS Command Line Interface (AWS CLI). Per la versione più recente dello scenario, visita la libreria di scenari nella console FIS e vai alla scheda Contenuto.

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