Cross-AZ: Traffic 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á.

Cross-AZ: Traffic Slowdown

Você pode usar o cenário Cross-AZ: Traffic Slowdown 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 entre 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 os recursos de destino da 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, e a perda de pacotes será injetada dessa AZ para outra AZs dentro da região.

  • Perda de pacotes - ajuste a perda de pacotes para testes sutis de interrupção, como 5%, ou mais, para testar mecanismos graves de degradação e recuperação da comunicação, como 50% ou até 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 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 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 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 os sintomas de uma desaceleração do tráfego, AZs introduzindo a perda de pacotes na comunicação de saída da AZ de destino para outra AZs na região na camada de rede. Essas ações são executadas paralelamente, 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 na AZ selecionada para ser executado: EC2 instância, tarefa do ECS ou pod EKS.

Perda de pacotes de rede ECS

Cross-AZ: A desaceleração do tráfego 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 externa 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 direciona tarefas com uma tag nomeada 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: A desaceleração do tráfego inclui 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 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 Perda de pacotes de rede

Cross-AZ: Traffic Slowdown usa a ação aws:ssm:send-command para executar o documento AWSFIS-Run -Network-Packet-Loss-Sources para injetar perda de pacotes para instâncias e prejudicar sua comunicação de saída com todas as outras na região. EC2 AZs 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 na AZ selecionada. Por padrão, ele tem como alvo 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 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 Cross-AZ: Traffic Slowdown, a 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 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": "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" } ] }