AZ: Application Slowdown - AWS Serviço de injeção de falhas

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AZ: Application Slowdown

Você pode usar o cenário AZ: Desaceleração do aplicativo para introduzir latência adicional entre os recursos em uma única zona de disponibilidade (AZ). Essa latência cria muitos dos sintomas de lentidão do aplicativo, uma interrupção parcial, às vezes conhecida como falha cinza. Ele adiciona latência aos fluxos de rede entre os recursos de destino. Os fluxos de rede representam o tráfego entre os recursos de computação — os pacotes de dados que transportam solicitações, respostas e outras comunicações entre seus servidores, contêineres e serviços. O cenário pode ajudar a validar as configurações de observabilidade, ajustar os limites de alarme, descobrir a sensibilidade do aplicativo à lentidão e praticar decisões operacionais críticas, como a evacuação de AZ.

Por padrão, o cenário adiciona 200 ms de latência a 100% dos fluxos de rede entre os recursos de destino na AZ selecionada por um período de 30 minutos. Você pode usar a caixa de diálogo Editar parâmetros compartilhados no console do AWS FIS para ajustar os seguintes parâmetros no nível do cenário, que então se aplicam às ações subjacentes:

  • Zona de disponibilidade - você pode selecionar a AZ a ser prejudicada no cenário.

  • Milissegundos (ms) de latência - ajuste isso com base na sensibilidade e nas necessidades do seu aplicativo. Você pode definir uma latência mais baixa para aplicativos mais sensíveis ou maior para testar o tratamento do tempo limite, por exemplo. Considere usar múltiplos da latência atual do seu aplicativo como linha de base.

  • Porcentagem de fluxos - reduza para prejudicar um subconjunto do tráfego. Por exemplo, você pode adicionar uma latência de 200 ms afetando 25% dos fluxos de rede para testes ainda mais sutis.

  • Duração - defina por quanto tempo o experimento será executado. Você pode encurtar para testes mais rápidos ou executar testes prolongados mais longos. Por exemplo, defina a duração para 2 horas para testar seus mecanismos de recuperação em condições precárias.

  • Segmentação de recursos - você pode definir recursos de destino para o cenário geral usando tags (para EC2 instâncias ou tarefas do ECS no EC2 Fargate) ou rótulos (para pods do EKS ativado). EC2 Você pode especificar suas próprias tags e rótulos ou usar os padrões fornecidos no cenário. Se você não quiser usar tags ou rótulos, você pode editar a ação para direcionar recursos especificando outros parâmetros.

  • Personalização - Se você não quiser segmentar EC2 os recursos do ECS, você pode deixar as ações com tags padrão. O experimento não encontrará nenhum recurso para direcionar e a ação será ignorada. No entanto, se você não quiser direcionar os recursos do EKS, remova completamente a ação e o destino do EKS do cenário, pois isso exige que um identificador de cluster do EKS seja fornecido. Para uma personalização ainda mais granular, você pode modificar ações individuais diretamente no modelo do experimento.

Ações

Juntas, as ações a seguir ajudam a criar muitos dos sintomas de lentidão de um aplicativo em uma única AZ, introduzindo latência adicional nos fluxos de rede, que então se propagam pelo aplicativo. Essas ações são executadas paralelamente, cada uma adicionando latência de 200 ms por 30 minutos por padrão. Após esse período, a latência retorna aos níveis normais. O cenário precisa de pelo menos um dos seguintes tipos de recursos para ser executado: EC2 instância, tarefa do ECS ou pod EKS.

Latência da rede ECS

AZ: A desaceleração do aplicativo inclui aws:ecs: task-network-latency para introduzir latência nas tarefas do ECS. A ação tem como alvo tarefas na AZ selecionada. Por padrão, ele direciona tarefas com uma tag nomeada AZApplicationSlowdown com um valor deLatencyForECS. Você pode substituir a tag padrão pela sua própria ou adicionar a tag de cenário às suas tarefas. Se nenhuma tarefa válida for encontrada, essa ação será ignorada. Antes de executar um experimento no ECS, você deve seguir as etapas de configuração das ações de tarefas do ECS.

Latência de rede EKS

AZ: A desaceleração do aplicativo inclui aws:eks: pod-network-latency para introduzir a latência nos pods EKS. A ação tem como alvo pods na AZ selecionada. Por padrão, ele tem como alvo pods dentro de um cluster que têm rótulos com o formato key=value. O rótulo padrão fornecido éAZApplicationSlowdown=LatencyForEKS. Você pode substituir o rótulo padrão pelo seu próprio ou adicionar esse rótulo aos seus pods. Se nenhum pod válido for encontrado, essa ação será ignorada. Antes de realizar um experimento no EKS, você deve seguir as etapas de configuração das ações do pod EKS.

EC2 Latência de rede

AZ: O Application Slowdown usa a ação aws:ssm:send-command para executar o documento -Network-Latency-Sources para introduzir a latência nas instâncias. AWSFIS-Run EC2 A ação tem como alvo instâncias na AZ selecionada. Por padrão, ele tem como alvo instâncias com uma tag nomeada AZApplicationSlowdown com um valor deLatencyForEC2. Você pode substituir a tag padrão pela sua própria ou adicionar essa tag às suas instâncias. Se nenhuma instância válida for encontrada, essa ação será ignorada. Antes de realizar um experimento sobre EC2 o uso do SSM, você deve configurar o agente do AWS Systems Manager.

Limitações

  • Esse cenário não inclui condições de interrupção. As condições de interrupção corretas para a aplicação devem ser adicionadas ao modelo de experimento.

Requisitos

  • Adicione as permissões necessárias à função experimental do AWS FIS.

  • Você precisa direcionar um ou mais recursos de qualquer um dos três tipos a seguir na AZ selecionada: EC2 instâncias, tarefas do ECS ou pods do EKS.

  • Todos os alvos do cenário devem estar na mesma VPC.

Permissões

Para executar esse cenário, você precisa de uma função do IAM com uma política de confiança que permita ao FIS assumir a função e as políticas gerenciadas para os tipos de recursos que você almeja no experimento: EC2 ECS e EKS. Quando você cria um modelo de experimento a partir do cenário AZ: Desaceleração do aplicativo, o FIS cria a função para você com a política de confiança e as seguintes políticas gerenciadas pela AWS:

Se você estiver usando uma função do IAM existente para executar o cenário AZ: Desaceleração do aplicativo, você pode anexar a seguinte política para conceder ao AWS FIS as permissões necessárias:

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

Conteúdo do cenário

O conteúdo a seguir define o cenário. Esse JSON pode ser salvo e usado para criar um modelo de experimento usando o create-experiment-templatecomando da AWS Command Line Interface (AWS CLI). Para obter a versão mais recente do cenário, visite a biblioteca de cenários no console FIS e acesse a guia Conteúdo.

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