View a markdown version of this page

Cross-AZ: Desaceleração do tráfego - 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á.

Cross-AZ: Desaceleração do tráfego

Você pode usar o cenário Cross-AZ: Desaceleração do tráfego para injetar perda de pacotes para interromper e diminuir a velocidade do tráfego entre as zonas de disponibilidade (AZs). A perda de pacotes prejudica a comunicação Cross-AZ, uma interrupção parcial, às vezes conhecida como falha cinza. Ele injeta perda de pacotes nos 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 e as dependências do aplicativo na comunicação entre AZ e praticar decisões operacionais críticas, como a evacuação de AZ.

Por padrão, o cenário injeta 15% de perda de pacotes em 100% dos fluxos de rede de saída para recursos de destino 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 a AZ a ser prejudicada, e a perda de pacotes será injetada dessa AZ para as outras AZs da região.

  • Perda de pacotes - ajuste a perda de pacotes para um nível mais baixo para testes sutis de interrupção, como 5%, ou mais, para testar mecanismos severos de degradação e recuperação da comunicação, como 50%, ou mesmo 100% para o impacto total da conectividade.

  • Porcentagem de fluxos - reduza para prejudicar um subconjunto do tráfego. Por exemplo, você pode injetar 15% de perda de pacotes 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 ajudar a testar os 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 os sintomas de uma desaceleração do tráfego entre AZs, introduzindo perda de pacotes na comunicação de saída da AZ de destino com outras AZs na região na camada de rede. Essas ações são executadas em paralelo, cada uma injetando 15% de perda de pacotes por 30 minutos por padrão. Após esse período, a comunicação volta ao normal. O cenário precisa de pelo menos um dos seguintes tipos de recursos no AZ selecionado para ser executado: instância do EC2, tarefa do ECS ou pod EKS.

Perda de pacotes de rede ECS

Cross-AZ: O Traffic Slowdown inclui aws:ecs:task-network-packet-loss para injetar perda de pacotes para tarefas do ECS. A ação visa tarefas na AZ selecionada e prejudica sua comunicação de saída com todas as outras AZs na região. Você pode personalizar ainda mais o escopo do impacto editando a ação e adicionando ou removendo AZs do Sources campo. Por padrão, ele segmenta tarefas com uma tag chamada CrossAZTrafficSlowdown com um valor dePacketLossForECS. 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.

Perda de pacotes de rede EKS

Cross-AZ: O Traffic Slowdown inclui https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html#pod-network-packet-loss aws:eks:pod-network-packet-loss para injetar perda de pacotes em pods EKS. A ação tem como alvo os pods na AZ selecionada e prejudica sua comunicação de saída com todas as outras AZs na região. Você pode personalizar ainda mais o escopo do impacto editando a ação e adicionando ou removendo AZs do Sources campo. 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 éCrossAZTraffic=PacketLossForEKS. 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.

Perda de pacotes de rede EC2

Cross-AZ: O Traffic Slowdown usa a ação aws:ssm:send-command para executar o AWSFIS-Run-Network-Packet-Loss-Sources documento para injetar perda de pacotes em instâncias do EC2 e prejudica sua comunicação de saída com todas as outras AZs na região. Você pode personalizar ainda mais o escopo do impacto editando a ação e adicionando ou removendo AZs do Sources campo. A ação tem como alvo instâncias no AZ selecionado. Por padrão, ele segmenta instâncias com uma tag nomeada CrossAZTrafficSlowdown com um valor dePacketLossForEC2. 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 Cross-AZ: Desaceleração do tráfego, 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 Cross-AZ: Traffic 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": "Cross-AZ: Traffic Slowdown" }, "description": "Inject packet loss to disrupt and slow down traffic between AZs.", "actions": { "PacketLossForEC2": { "actionId": "aws:ssm:send-command", "parameters": { "duration": "PT30M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-Network-Packet-Loss-Sources", "documentParameters": "{\"Sources\":\"us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f\",\"LossPercent\":\"15\",\"Interface\":\"DEFAULT\",\"TrafficType\":\"egress\",\"DurationSeconds\":\"1800\",\"FlowsPercent\":\"100\",\"InstallDependencies\":\"True\"}" }, "targets": { "Instances": "TargetsForEC2" } }, "PacketLossForECS": { "actionId": "aws:ecs:task-network-packet-loss", "parameters": { "sources": "us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f", "lossPercent": "15", "duration": "PT30M", "flowsPercent": "100", "installDependencies": "true", "useEcsFaultInjectionEndpoints": "true" }, "targets": { "Tasks": "TargetsForECS" } }, "PacketLossForEKS": { "actionId": "aws:eks:pod-network-packet-loss", "parameters": { "sources": "us-east-1b,us-east-1c,us-east-1d,us-east-1e,us-east-1f", "lossPercent": "15", "duration": "PT30M", "flowsPercent": "100", "interface": "DEFAULT", "kubernetesServiceAccount": "fis-service-account" }, "targets": { "Pods": "TargetsForEKS" } } }, "targets": { "TargetsForEC2": { "filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "CrossAZTrafficSlowdown": "PacketLossForEC2" }, "resourceType": "aws:ec2:instance", "selectionMode": "ALL" }, "TargetsForECS": { "filters": [ { "path": "AvailabilityZone", "values": [ "us-east-1a" ] } ], "resourceTags": { "CrossAZTrafficSlowdown": "PacketLossForECS" }, "resourceType": "aws:ecs:task", "selectionMode": "ALL" }, "TargetsForEKS": { "parameters": { "availabilityZoneIdentifier": "us-east-1a", "clusterIdentifier": "", "namespace": "default", "selectorType": "labelSelector", "selectorValue": "CrossAZTrafficSlowdown=PacketLossForEKS" }, "resourceType": "aws:eks:pod", "selectionMode": "ALL" } }, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "skip" }, "stopConditions": [ { "source": "none" } ] }