View a markdown version of this page

AZ: Rallentamento dell'applicazione - AWS Servizio di iniezione 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: Rallentamento dell'applicazione

È 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: i pacchetti di dati che trasportano richieste, risposte e altre comunicazioni tra server, contenitori e servizi. Lo scenario può aiutare a convalidare le impostazioni di osservabilità, regolare le soglie di allarme, scoprire la sensibilità delle applicazioni ai rallentamenti e prendere decisioni operative critiche come l'evacuazione dall'aeroporto.

Per impostazione predefinita, lo scenario aggiunge 200 ms di latenza al 100% dei flussi di rete tra le risorse di destinazione all'interno dell'AZ selezionato 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: regolatela in base alla sensibilità e alle esigenze dell'applicazione. È possibile impostare una latenza più bassa per le applicazioni più sensibili o una maggiore per testare la gestione dei timeout, ad esempio. Prendi in considerazione l'utilizzo di multipli della latenza attuale delle applicazioni come riferimento.

  • Percentuale di 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ù accurati.

  • Durata: imposta la durata dell'esperimento. È possibile abbreviare i test per velocizzare i test 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 complessivo utilizzando tag (per istanze EC2 o attività ECS su EC2 o Fargate) o etichette (per pod EKS su EC2). È possibile specificare tag ed etichette personalizzati o utilizzare le impostazioni predefinite fornite nello scenario. Se non desideri utilizzare tag o etichette, puoi modificare l'azione per indirizzare le risorse specificando altri parametri.

  • Personalizzazione: se non desideri indirizzare le risorse EC2 o ECS, puoi lasciare le azioni con i tag predefiniti. L'esperimento non troverà alcuna risorsa da scegliere come target e l'azione verrà saltata. 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 le singole azioni direttamente nel modello di esperimento.

Azioni

Insieme, le seguenti azioni contribuiscono a creare molti dei sintomi del rallentamento di un'applicazione in una singola AZ introducendo una latenza aggiuntiva nei 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 essere eseguito: istanza EC2, attività 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 riguarda le attività nell'AZ selezionato. Per impostazione predefinita, ha come target le attività con un tag denominato AZApplicationSlowdown con il valore diLatencyForECS. Puoi sostituire il tag predefinito con il tuo o aggiungere il tag dello 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 è indirizzata ai pod nell'AZ selezionato. Per impostazione predefinita, si rivolge ai pod all'interno di un cluster con etichette nel formato key=value. L'etichetta predefinita fornita è. AZApplicationSlowdown=LatencyForEKS Puoi sostituire l'etichetta predefinita con una tua o aggiungere questa etichetta ai tuoi pod. Se non viene trovato alcun pod valido, questa azione verrà ignorata. Prima di eseguire un esperimento su EKS, è necessario seguire i passaggi di configurazione per le azioni dei pod EKS.

Latenza di rete EC2

AZ: Application Slowdown utilizza l'azione aws:ssm:send-command per eseguire il documento e introdurre la latenza per le istanze EC2. AWSFIS-Run-Network-Latency-Sources L'azione è indirizzata alle istanze nell'AZ selezionato. 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 viene trovata alcuna istanza valida, questa azione verrà ignorata. Prima di eseguire un esperimento su EC2 utilizzando SSM, è necessario 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 di esperimento.

Requisiti

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

  • Devi scegliere come target una o più risorse da uno dei seguenti 3 tipi all'interno dell'AZ selezionato: istanze EC2, attività ECS o pod EKS.

  • Tutti i target 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 politiche gestite per i tipi di risorse presi di mira 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 politiche gestite da AWS:

Se stai utilizzando 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 JSON può essere salvato e utilizzato per creare un modello di esperimento utilizzando il comando create-experiment-template dall'interfaccia a riga di comando di AWS (AWS CLI). Per la versione più recente dello scenario, visita la libreria degli 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" } ] }