View a markdown version of this page

AZ: Desaceleração do aplicativo - 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: Desaceleração do aplicativo

Você pode usar o cenário AZ: Application Slowdown para introduzir latência adicional entre 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 dentro do AZ selecionado 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 o AZ a ser prejudicado 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 da 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 mais longos e contínuos. 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 instâncias do EC2 ou tarefas do ECS no EC2 ou Fargate) ou rótulos (para pods EKS no EC2). Você pode especificar suas próprias tags e rótulos ou usar os padrões fornecidos no cenário. Se 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 focar nos recursos do EC2 ou do ECS, você pode deixar as ações com as tags padrão. O experimento não encontrará nenhum recurso para atingir 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 alvo do EKS do cenário, pois isso exige que um identificador de cluster EKS seja fornecido. Para uma personalização ainda mais granular, você pode modificar ações individuais diretamente no modelo de 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 depois se propagam pelo aplicativo. Essas ações são executadas em paralelo, cada uma adicionando 200 ms de latência 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: instância do EC2, tarefa do ECS ou pod EKS.

Latência de rede ECS

AZ: O Application Slowdown inclui aws:ecs:task-network-latency para introduzir latência nas tarefas do ECS. A ação tem como alvo as tarefas no AZ selecionado. Por padrão, ele segmenta tarefas com uma tag chamada 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: O Application Slowdown inclui https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-latency aws:eks:pod-network-latency para introduzir latência para pods EKS. A ação tem como alvo os pods no AZ selecionado. 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 a etiqueta padrão pela sua própria ou adicionar essa etiqueta aos seus pods. Se nenhum pods válido for encontrado, essa ação será ignorada. Antes de executar um experimento no EKS, você deve seguir as etapas de configuração das ações do pod EKS.

Latência de rede EC2

AZ: O Application Slowdown usa a ação aws:ssm:send-command para executar o documento e introduzir latência nas instâncias do EC2. AWSFIS-Run-Network-Latency-Sources A ação tem como alvo instâncias no AZ selecionado. Por padrão, ele segmenta 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 executar um experimento no EC2 usando 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 de experimento do AWS FIS.

  • Você precisa direcionar um ou mais recursos de qualquer um dos três tipos a seguir no AZ selecionado: instâncias do EC2, 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: Application Slowdown, 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: Application Slowdown, 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 comando create-experiment-template da AWS Command Line Interface (AWS CLI). Para a versão mais recente do cenário, visite a biblioteca de cenários no console do 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" } ] }