Metas para o AWS FIS - 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á.

Metas para o AWS FIS

Um alvo é um ou mais AWS recursos nos quais uma ação é executada pelo AWS AWS Fault Injection Service (FIS) durante um experimento. Os destinos podem estar na mesma conta da AWS do experimento, ou em uma conta diferente usando um experimento com várias contas. Para saber mais sobre como segmentar recursos em uma conta diferente, consulte Trabalhando com experimentos com várias contas para AWS FIS.

Você define destinos ao criar um modelo de experimento. Você pode usar o mesmo destino para várias ações em seu modelo de experimento.

AWS O FIS identifica todos os alvos no início do experimento, antes de iniciar qualquer uma das ações no conjunto de ações. AWS O FIS usa os recursos alvo que seleciona para todo o experimento. Se nenhum destino for encontrado, o experimento falhará.

Sintaxe de destino

A seguir está a sintaxe para um destino.

{ "targets": { "target_name": { "resourceType": "resource-type", "resourceArns": [ "resource-arn" ], "resourceTags": { "tag-key": "tag-value" }, "parameters": { "parameter-name": "parameter-value" }, "filters": [ { "path": "path-string", "values": ["value-string"] } ], "selectionMode": "value" } } }

Quando você define um destino, fornece o seguinte:

target_name

Um nome para o destino.

resourceType

O tipo de recurso.

resourceArns

O nome do recurso da Amazon (ARN) dos recursos específicos.

resourceTags

As tags aplicadas a recursos específicos.

parameters

Os parâmetros que identificam destinos usando atributos específicos.

filters

O recurso filtra o escopo dos recursos de destino identificados usando atributos específicos.

selectionMode

O modo de seleção dos recursos identificados.

Para obter exemplos, consulte Exemplos de destinos.

Tipos de recursos

Cada ação AWS do FIS é executada em um tipo de AWS recurso específico. Quando você define um destino, deve especificar exatamente um tipo de recurso. Quando você especifica um destino para uma ação, o destino deve ser o tipo de recurso compatível com a ação.

Os seguintes tipos de recursos são compatíveis com o AWS FIS:

  • aws:dynamodb:global-table: uma tabela global do Amazon DynamoDB

  • aws:ec2:autoscaling-group — Um grupo do Amazon Auto Scaling EC2

  • aws:ec2:ebs-volume – Um volume do Amazon EBS

  • aws:ec2:instance — Uma instância da Amazon EC2

  • aws:ec2:spot-instance — Uma instância spot da Amazon EC2

  • aws:ec2:subnet – Uma sub-rede do Amazon VPC

  • aws:ec2:transit-gateway: um gateway de trânsito

  • aws:ecs:cluster – Um cluster do Amazon ECS

  • aws:ecs:task – Uma tarefa do Amazon ECS

  • aws:eks:cluster – Um cluster do Amazon EKS

  • aws:eks:nodegroup – Um grupo de nós do Amazon EKS

  • aws:eks:pod – Um pod do Kubernetes

  • aws:elasticache:redis-replicationgroup — Um grupo de replicação (Redis OSS) ElastiCache

  • aws:iam:role — um perfil do IAM

  • aws:lambda:function — Uma função AWS Lambda

  • aws:rds:cluster – Um cluster do Amazon Aurora DB

  • aws:rds:db – Uma instância do Amazon RDS DB

  • aws:s3:bucket: um bucket do Amazon S3

Identificar recursos de destino

Ao definir um alvo no console do AWS FIS, você pode escolher AWS recursos específicos (de um tipo de recurso específico) para segmentar. Ou você pode permitir que o AWS FIS identifique um grupo de recursos com base nos critérios que você fornece.

Para identificar seus recursos de destino, você pode especificar o seguinte:

  • Recurso IDs — O recurso IDs de AWS recursos específicos. Todos os recursos IDs devem representar o mesmo tipo de recurso.

  • Tags de recursos — As tags aplicadas a AWS recursos específicos.

  • Filtros de recursos – O caminho e os valores que representam recursos com atributos específicos. Para obter mais informações, consulte Filtros de recursos.

  • Parâmetros de recursos – Os parâmetros que representam recursos que atendem a critérios específicos. Para obter mais informações, consulte Parâmetros de recurso.

Considerações
  • Você não pode especificar um ID de recurso e uma tag de recurso para o mesmo destino.

  • Você não pode especificar um ID de recurso e um filtro de recurso para o mesmo destino.

  • Se você especificar uma tag de recurso com um valor de tag vazio, isso não é equivalente a um caractere curinga. Ele combina recursos que têm uma tag com a chave de tag especificada e um valor de tag vazio.

  • Se você especificar mais de uma tag, todas as tags especificadas deverão estar presentes no recurso de destino para que ele seja selecionado (AND).

Filtros de recursos

Os filtros de recursos são consultas que identificam os recursos de destino de acordo com atributos específicos. AWS O FIS aplica a consulta à saída de uma ação de API que contém a descrição canônica do AWS recurso, de acordo com o tipo de recurso que você especificar. Os recursos que têm atributos que correspondem à consulta são incluídos na definição de destino.

Cada filtro é expresso como um caminho de atributo e valores possíveis. Um caminho é uma sequência de elementos, separados por pontos, que descrevem o caminho para alcançar um atributo na saída da ação Descrever de um recurso. Cada período representa a expansão de um elemento. Cada elemento deve ser expresso em letras maiúsculas e minúsculas, mesmo que a saída da ação Descrever de um recurso esteja em maiúsculas e minúsculas. Por exemplo, você deve usar AvailabilityZone, não availablityZone como um elemento de atributo.

"filters": [ { "path": "Component.Component.Component", "values": [ "string" ] } ],

A lógica a seguir se aplica a todos os filtros de recursos:

  • Se vários filtros forem fornecidos, incluindo filtros com o mesmo caminho, todos os filtros precisarão ser combinados para que um recurso seja selecionado — AND

  • Se vários valores forem fornecidos para um único filtro, qualquer valor precisará ser correspondido para que um recurso seja selecionado — OR

  • Se vários valores forem encontrados no local do caminho da chamada de API de descrição, qualquer valor precisará ser correspondido para que um recurso seja selecionado — OR

  • Para combinar os pares de chave/valor da tag, você deve selecionar os recursos de destino por tags (veja acima).

A tabela a seguir inclui as ações e AWS CLI os comandos da API que você pode usar para obter as descrições canônicas de cada tipo de recurso. AWS O FIS executa essas ações em seu nome para aplicar os filtros que você especifica. A documentação correspondente descreve os recursos incluídos nos resultados por padrão. Por exemplo, a documentação DescribeInstances indica que instâncias encerradas recentemente podem aparecer nos resultados.

Tipo de recurso Ação da API AWS CLI comando
aws:ec2:autoscaling-group DescribeAutoScalingGroups describe-auto-scaling-groups
aws:ec2:ebs-volume DescribeVolumes describe-volumes
aws:ec2:instance DescribeInstances describe-instances
aws:ec2:subnet DescribeSubnets describe-subnets
aws:ec2:transit-gateway DescribeTransitGateways describe-transit-gateways
aws:ecs:cluster DescribeClusters describe-clusters
aws:ecs:task DescribeTasks describe-tasks
aws:eks:cluster DescribeClusters describe-clusters
aws:eks:nodegroup DescribeNodegroup describe-nodegroup
aws:elasticache:redis-replicationgroup DescribeReplicationGroups describe-replication-groups
aws:iam:role ListRoles list-roles
aws:lambda:function ListFunctions funções de lista
aws:rds:cluster DescreverDBClusters describe-db-clusters
aws:rds:db DescreverDBInstances describe-db-instances
aws:s3:bucket ListBuckets list-buckets
aws:dynamodb:global-table DescribeTable tabela de descrição

Para obter exemplos, consulte Exemplo de filtros.

Parâmetros de recurso

Os parâmetros dos recursos identificam os recursos de destino de acordo com critérios específicos.

O tipo de recurso a seguir oferece suporte a parâmetros.

aws:ec2:ebs-volume
  • availabilityZoneIdentifier – O código (por exemplo, us-east-1a) da zona de disponibilidade que contém os volumes de destino.

aws:ec2:subnet
  • availabilityZoneIdentifier – O código (por exemplo, us-east-1a) ou o ID da AZ (por exemplo, use1-az1) da zona de disponibilidade que contém as sub-redes de destino.

  • vpc – A VPC que contém as sub-redes de destino. Não é permitido mais de uma VPC por conta.

aws:ecs:task
  • cluster – O cluster que contém as tarefas de destino.

  • service – O cluster que contém as tarefas de destino.

aws:eks:pod
  • availabilityZoneIdentifier: optional. A zona de disponibilidade que contém os pods de destino. Por exemplo, us-east-1d. Determinamos a zona de disponibilidade de um pod comparando seu HostIP e o CIDR da sub-rede do cluster.

  • clusterIdentifier – obrigatório. O nome ou o ARN do cluster do EKS de destino.

  • namespace – obrigatório. O namespace do Kubernetes dos pods de destino.

  • selectorType – obrigatório. O tipo de seletor. Os valores possíveis são labelSelector, deploymentName e podName.

  • selectorValue – obrigatório. O valor do seletor. Esse valor depende do valor de selectorType.

  • targetContainerName: optional. O nome do contêiner de destino, conforme a especificação do pod. O padrão é o primeiro contêiner definido em cada especificação do pod de destino.

aws:lambda:function
  • functionQualifier: optional. A versão ou o alias da função a ser segmentada. Se nenhum qualificador for especificado, todas as invocações serão consideradas para segmentação. Se um alias com várias versões for especificado, todas as versões incluídas no alias serão consideradas para segmentação, desde que sejam invocadas usando um ARN contendo o alias. Se o alias especial $LATEST for usado, as invocações para a função base ARN e as invocações incluídas $LATEST no ARN serão consideradas para injeção de falhas. Para obter mais informações sobre as versões do Lambda, consulte Gerenciar versões da função Lambda no guia do usuário.AWS Lambda

aws:rds:cluster
  • writerAvailabilityZoneIdentifiers: optional. As zonas de disponibilidade do gravador do cluster de banco de dados. Os valores possíveis são: uma lista separada por vírgulas de identificadores de zona de disponibilidade, all.

aws:rds:db
  • availabilityZoneIdentifiers: optional. As zonas de disponibilidade da instância de banco de dados a serem afetadas. Os valores possíveis são: uma lista separada por vírgulas de identificadores de zona de disponibilidade, all.

aws:elasticache:redis-replicationgroup
  • availabilityZoneIdentifier – obrigatório. O código (por exemplo, us-east-1a) ou a ID da AZ (por exemplo, use1-az1) da zona de disponibilidade que contém os nós de destino.

Modo de seleção

Você define o escopo dos recursos identificados especificando um modo de seleção. AWS O FIS suporta os seguintes modos de seleção:

  • ALL – Executar a ação em todos os destinos.

  • COUNT(n) – Executar a ação no número especificado de destinos escolhidos aleatoriamente entre os destinos identificados. Por exemplo, COUNT(1) seleciona um dos destinos identificados.

  • PERCENT(n) – Executar a ação no percentual especificado de destinos escolhidos aleatoriamente entre os destinos identificados. Por exemplo, PERCENT(25) seleciona 25% dos destinos identificados.

Se você tiver um número ímpar de recursos e especificar 50%, o AWS FIS arredonda para baixo. Por exemplo, se você adicionar cinco EC2 instâncias da Amazon como metas e o escopo até 50%, o AWS FIS arredonda para duas instâncias. Você não pode especificar uma porcentagem menor que um recurso. Por exemplo, se você adicionar quatro EC2 instâncias da Amazon e o escopo chegar a 5%, o AWS FIS não poderá selecionar uma instância.

Se você definir vários alvos usando o mesmo tipo de recurso de destino, o AWS FIS poderá selecionar o mesmo recurso várias vezes.

Independentemente do modo de seleção usado, se o escopo especificado não identificar recursos, o experimento falhará.

Exemplos de destinos

Os seguintes são exemplos de destinos.

Exemplo: instâncias na VPC especificada com as tags especificadas

Os destinos possíveis para este exemplo são EC2 instâncias da Amazon na VPC especificada com a tag env=prod. O modo de seleção especifica que o AWS FIS escolha um desses alvos aleatoriamente.

{ "targets": { "randomInstance": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556" ] } ], "selectionMode": "COUNT(1)" } } }
Exemplo: tarefas com os parâmetros especificados

Os destinos possíveis para este exemplo são tarefas do Amazon ECS com o cluster e o serviço especificados. O modo de seleção especifica que o AWS FIS escolha um desses alvos aleatoriamente.

{ "targets": { "randomTask": { "resourceType": "aws:ecs:task", "parameters": { "cluster": "myCluster", "service": "myService" }, "selectionMode": "COUNT(1)" } } }

Exemplo de filtros

Os seguintes são exemplos de filtros.

Exemplo: EC2 instâncias

Quando você especifica um filtro para uma ação compatível com o tipo de recurso aws:ec2:instance, o AWS FIS usa o comando EC2 describe-instances Amazon e aplica o filtro para identificar os destinos.

O comando describe-instances retorna a saída JSON em que cada instância é uma estrutura do Instances. A seguir está uma saída parcial que inclui campos marcados comitalics. Forneceremos exemplos que usam esses campos para especificar um caminho de atributo a partir da estrutura da saída JSON.

{ "Reservations": [ { "Groups": [], "Instances": [ { "ImageId": "ami-00111111111111111", "InstanceId": "i-00aaaaaaaaaaaaaaa", "InstanceType": "t2.micro", "KeyName": "virginia-kp", "LaunchTime": "2020-09-30T11:38:17.000Z", "Monitoring": { "State": "disabled" }, "Placement": { "AvailabilityZone": "us-east-1a", "GroupName": "", "Tenancy": "default" }, "PrivateDnsName": "ip-10-0-1-240.ec2.internal", "PrivateIpAddress": "10.0.1.240", "ProductCodes": [], "PublicDnsName": "ec2-203-0-113-17.compute-1.amazonaws.com", "PublicIpAddress": "203.0.113.17", "State": { "Code": 16, "Name": "running" }, "StateTransitionReason": "", "SubnetId": "subnet-aabbcc11223344556", "VpcId": "vpc-00bbbbbbbbbbbbbbbbb", ... "NetworkInterfaces": [ { ... "Groups": [ { "GroupName": "sec-group-1", "GroupId": "sg-a0011223344556677" }, { "GroupName": "sec-group-1", "GroupId": "sg-b9988776655443322" } ], ... }, ... }, ... { ... } ], "OwnerId": "123456789012", "ReservationId": "r-aaaaaabbbbb111111" }, ... ] }

Para selecionar instâncias em uma zona de disponibilidade específica usando um filtro de recursos, especifique o caminho do atributo para AvailabilityZone e o código da zona de disponibilidade como valor. Por exemplo:

"filters": [ { "path": "Placement.AvailabilityZone", "values": [ "us-east-1a" ] } ],

Para selecionar instâncias em uma sub-rede específica usando um filtro de recurso, especifique o caminho do atributo para SubnetId e o ID da sub-rede como o valor. Por exemplo:

"filters": [ { "path": "SubnetId", "values": [ "subnet-aabbcc11223344556" ] } ],

Para selecionar instâncias que estão em um estado de instância específico, especifique o caminho do atributo para Name e um dos seguintes nomes de estado como o valor: pending | running | shutting-down | terminated | stopping |stopped. Por exemplo:

"filters": [ { "path": "State.Name", "values": [ "running" ] } ],

Para selecionar instâncias que tenham vários grupos de segurança anexados, especifique um único filtro com o caminho do atributo GroupId e vários grupos de segurança IDs. Por exemplo:

"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677", "sg-f1100110011001100" ] } ],

Para selecionar instâncias que tenham vários grupos de segurança anexados, especifique vários filtros com o caminho do atributo GroupId e um único ID do grupo de segurança para cada filtro. Por exemplo:

"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677" ] }, { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-b9988776655443322" ] } ],
Exemplo: cluster Amazon RDS (cluster do banco de dados)

Quando você especifica um filtro para uma ação que suporta o tipo de recurso aws:rds:cluster, o FIS AWS executa o describe-db-clusters comando Amazon RDS e aplica o filtro para identificar os destinos.

O comando describe-db-clusters retorna uma saída JSON semelhante à seguinte para cada cluster de banco de dados. A seguir está uma saída parcial que inclui campos marcados comitalics. Forneceremos exemplos que usam esses campos para especificar um caminho de atributo a partir da estrutura da saída JSON.

[ { "AllocatedStorage": 1, "AvailabilityZones": [ "us-east-2a", "us-east-2b", "us-east-2c" ], "BackupRetentionPeriod": 7, "DatabaseName": "", "DBClusterIdentifier": "database-1", "DBClusterParameterGroup": "default.aurora-postgresql11", "DBSubnetGroup": "default-vpc-01234567abc123456", "Status": "available", "EarliestRestorableTime": "2020-11-13T15:08:32.211Z", "Endpoint": "database-1.cluster-example.us-east-2.rds.amazonaws.com", "ReaderEndpoint": "database-1.cluster-ro-example.us-east-2.rds.amazonaws.com", "MultiAZ": false, "Engine": "aurora-postgresql", "EngineVersion": "11.7", ... } ]

Para aplicar um filtro de recursos que retorna somente os clusters de banco de dados que usam um mecanismo de banco de dados específico, especifique o caminho do atributo para Engine e o valor como aurora-postgresql conforme mostrado no exemplo a seguir.

"filters": [ { "path": "Engine", "values": [ "aurora-postgresql" ] } ],

Para aplicar um filtro de recurso que retorna apenas os clusters de banco de dados em uma zona de disponibilidade específica, especifique o caminho do atributo e o valor conforme mostrado no exemplo a seguir.

"filters": [ { "path": "AvailabilityZones", "values": [ "us-east-2a" ] } ],