Objectifs pour AWS FIS - AWS Service d'injection de défauts

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Objectifs pour AWS FIS

Une cible est une ou plusieurs AWS ressources sur lesquelles une action est effectuée par AWS Fault Injection Service (AWS FIS) au cours d'une expérience. Les cibles peuvent se trouver dans le même AWS compte que l'expérience, ou dans un compte différent dans le cas d'une expérience multi-comptes. Pour en savoir plus sur le ciblage des ressources dans un autre compte, consultezExpériences multi-comptes pour AWS FIS.

Vous définissez des cibles lorsque vous créez un modèle d'expérience. Vous pouvez utiliser la même cible pour plusieurs actions dans votre modèle de test.

AWS FISidentifie toutes les cibles au début de l'expérience, avant de lancer l'une des actions de l'ensemble d'actions. AWS FISutilise les ressources cibles qu'il sélectionne pour l'ensemble de l'expérience. Si aucune cible n'est trouvée, l'expérience échoue.

Syntaxe cible

Voici la syntaxe d'une cible.

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

Lorsque vous définissez une cible, vous fournissez les informations suivantes :

target_name

Nom de la cible.

resourceType

Type de ressource.

resourceArns

Les Amazon Resource Names (ARN) de ressources spécifiques.

resourceTags

Les balises appliquées à des ressources spécifiques.

parameters

Les paramètres qui identifient les cibles à l'aide d'attributs spécifiques.

filters

Les filtres de ressources couvrent les ressources cibles identifiées à l'aide d'attributs spécifiques.

selectionMode

Mode de sélection des ressources identifiées.

Pour obtenir des exemples, consultez Exemples de cibles.

Types de ressources

Chaque AWS FIS action est exécutée sur un type de AWS ressource spécifique. Lorsque vous définissez une cible, vous devez spécifier exactement un type de ressource. Lorsque vous spécifiez une cible pour une action, celle-ci doit être le type de ressource pris en charge par l'action.

Les types de ressources suivants sont pris en charge par AWS FIS :

  • aws:dynamodb:global-table — Une table globale Amazon DynamoDB

  • aws:ec2:autoscaling-group — Un groupe Amazon Auto Scaling EC2

  • aws:ec2:ebs-volume — Un volume Amazon EBS

  • aws:ec2:instance — Une instance Amazon EC2

  • aws:ec2:spot-instance — Une instance Amazon Spot EC2

  • aws:ec2:subnet — Un sous-réseau Amazon VPC

  • aws:ec2:transit-gateway — Une passerelle de transit

  • aws:ecs:cluster — Un cluster Amazon ECS

  • aws:ecs:task — Une tâche Amazon ECS

  • aws:eks:cluster — Un cluster Amazon EKS

  • aws:eks:nodegroup — Un groupe de nœuds Amazon EKS

  • aws:eks:pod — Un pod Kubernetes

  • aws:elasticache:redis-replicationgroup — Un groupe de réplication (Redis) ElastiCache OSS

  • aws:iam:role — Un rôle IAM

  • aws:rds:cluster — Un cluster de base de données Amazon Aurora

  • aws:rds:db — Une instance de base de données Amazon RDS

  • aws:s3:bucket — Un compartiment Amazon S3

Identifier les ressources cibles

Lorsque vous définissez une cible dans la AWS FIS console, vous pouvez choisir des AWS ressources spécifiques (d'un type de ressource spécifique) à cibler. Vous pouvez également laisser AWS FIS identifier un groupe de ressources en fonction des critères que vous fournissez.

Pour identifier vos ressources cibles, vous pouvez spécifier les éléments suivants :

  • Ressource IDs : ressource constituée IDs de AWS ressources spécifiques. Toutes les ressources IDs doivent représenter le même type de ressource.

  • Balises de ressources : balises appliquées à des AWS ressources spécifiques.

  • Filtres de ressources : chemin et valeurs représentant les ressources dotées d'attributs spécifiques. Pour de plus amples informations, veuillez consulter Filtres de ressources.

  • Paramètres des ressources : paramètres qui représentent les ressources répondant à des critères spécifiques. Pour de plus amples informations, veuillez consulter Paramètres des ressources.

Considérations
  • Vous ne pouvez pas spécifier à la fois un ID de ressource et une étiquette de ressource pour la même cible.

  • Vous ne pouvez pas spécifier à la fois un ID de ressource et un filtre de ressources pour la même cible.

  • Si vous spécifiez une balise de ressource avec une valeur de balise vide, elle n'est pas équivalente à un caractère générique. Il fait correspondre les ressources qui ont une balise avec la clé de balise spécifiée et une valeur de balise vide.

Filtres de ressources

Les filtres de ressources sont des requêtes qui identifient les ressources cibles en fonction d'attributs spécifiques. AWS FISapplique la requête à la sortie d'une API action contenant la description canonique de la AWS ressource, en fonction du type de ressource que vous spécifiez. Les ressources dont les attributs correspondent à la requête sont incluses dans la définition cible.

Chaque filtre est exprimé sous la forme d'un chemin d'attribut et de valeurs possibles. Un chemin est une séquence d'éléments, séparés par des points, qui décrivent le chemin permettant d'atteindre un attribut dans le résultat de l'action Décrire pour une ressource. Chaque élément doit être exprimé en cas de Pascal, même si le résultat de l'action Describe pour une ressource est en cas de chameau. Par exemple, vous devez utiliserAvailabilityZone, et non availablityZone comme élément d'attribut.

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

Le tableau suivant inclut les API actions et AWS CLI les commandes que vous pouvez utiliser pour obtenir les descriptions canoniques de chaque type de ressource. AWS FISexécute ces actions en votre nom pour appliquer les filtres que vous spécifiez. La documentation correspondante décrit les ressources incluses par défaut dans les résultats. Par exemple, la documentation des DescribeInstances états dans lesquels des instances ont récemment été résiliées peut apparaître dans les résultats.

La logique suivante s'applique à tous les filtres de ressources :

  • Valeurs à l'intérieur d'un filtre : OR

  • Valeurs entre les filtres : AND

Pour obtenir des exemples, consultez Exemples de filtres.

Paramètres des ressources

Les paramètres des ressources identifient les ressources cibles en fonction de critères spécifiques.

Le type de ressource suivant prend en charge les paramètres.

aws:ec2:ebs-volume
  • availabilityZoneIdentifier— Le code (par exemple, us-east-1a) de la zone de disponibilité qui contient les volumes cibles.

aws:ec2:subnet
  • availabilityZoneIdentifier— Le code (par exemple, us-east-1a) ou l'ID AZ (par exemple, use1-az1) de la zone de disponibilité qui contient les sous-réseaux cibles.

  • vpc— Celui VPC qui contient les sous-réseaux cibles. Il n'en prend pas en charge plus d'un VPC par compte.

aws:ecs:task
  • cluster— Le cluster qui contient les tâches cibles.

  • service— Le service qui contient les tâches cibles.

aws:eks:pod
  • availabilityZoneIdentifier : facultatif. La zone de disponibilité qui contient les pods cibles. Par exemple, us-east-1d. Nous déterminons la zone de disponibilité d'un pod en comparant son adresse IP d'hôte et celle CIDR du sous-réseau du cluster.

  • clusterIdentifier : obligatoire. Nom ou nom ARN du EKS cluster cible.

  • namespace : obligatoire. L'espace de noms Kubernetes des pods cibles.

  • selectorType : obligatoire. Type de sélecteur. Les valeurs possibles sont labelSelector, deploymentName et podName.

  • selectorValue : obligatoire. La valeur du sélecteur. Cette valeur dépend de la valeur deselectorType.

  • targetContainerName : facultatif. Le nom du conteneur cible tel que défini dans les spécifications du pod. La valeur par défaut est le premier conteneur défini dans les spécifications de chaque pod cible.

aws:rds:cluster
  • writerAvailabilityZoneIdentifiers : facultatif. Les zones de disponibilité du rédacteur du cluster de base de données. Les valeurs possibles sont les suivantes : une liste d'identifiants de zone de disponibilité séparés par des virgules,. all

aws:rds:db
  • availabilityZoneIdentifiers : facultatif. Les zones de disponibilité de l'instance de base de données à affecter. Les valeurs possibles sont les suivantes : une liste d'identifiants de zone de disponibilité séparés par des virgules,. all

aws:elasticache:redis-replicationgroup
  • availabilityZoneIdentifier : obligatoire. Le code (par exemple, us-east-1a) ou l'ID AZ (par exemple, use1-az1) de la zone de disponibilité qui contient les nœuds cibles.

Mode de sélection

Vous définissez le périmètre des ressources identifiées en spécifiant un mode de sélection. AWS FISprend en charge les modes de sélection suivants :

  • ALL— Exécute l'action sur toutes les cibles.

  • COUNT(n)— Exécute l'action sur le nombre de cibles spécifié, choisies au hasard parmi les cibles identifiées. Par exemple, COUNT (1) sélectionne l'une des cibles identifiées.

  • PERCENT(n)— Exécute l'action sur le pourcentage de cibles spécifié, choisi au hasard parmi les cibles identifiées. Par exemple, PERCENT (25) sélectionne 25 % des cibles identifiées.

Si vous avez un nombre impair de ressources et que vous spécifiez 50 %, AWS FIS arrondissez au chiffre inférieur. Par exemple, si vous ajoutez cinq EC2 instances Amazon comme cibles et que le champ d'application est de 50 %, AWS FIS arrondissez à deux instances. Vous ne pouvez pas spécifier un pourcentage inférieur à une ressource. Par exemple, si vous ajoutez quatre EC2 instances Amazon et que vous atteignez une portée de 5 %, AWS FIS vous ne pouvez pas sélectionner d'instance.

Si vous définissez plusieurs cibles en utilisant le même type de ressource cible, AWS FIS vous pouvez sélectionner la même ressource plusieurs fois.

Quel que soit le mode de sélection que vous utilisez, si l'étendue que vous spécifiez n'identifie aucune ressource, l'expérience échoue.

Exemples de cibles

Voici des exemples de cibles.

Exemple : instances dans le champ spécifié VPC avec les balises spécifiées

Les cibles possibles pour cet exemple sont les EC2 instances Amazon spécifiées VPC avec le tagenv=prod. Le mode de sélection indique que l'une de ces cibles est AWS FIS choisie au hasard.

{ "targets": { "randomInstance": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556" ] } ], "selectionMode": "COUNT(1)" } } }
Exemple : tâches avec les paramètres spécifiés

Les cibles possibles pour cet exemple sont les ECS tâches Amazon avec le cluster et le service spécifiés. Le mode de sélection indique que AWS FIS l'une de ces cibles doit être choisie au hasard.

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

Exemples de filtres

Voici des exemples de filtres.

Exemple : EC2 instances

Lorsque vous spécifiez un filtre pour une action qui prend en charge le type de ressource aws:ec2:instance, vous utilisez AWS FIS la EC2 describe-instances commande Amazon et appliquez le filtre pour identifier les cibles.

La describe-instances commande renvoie une JSON sortie dans laquelle chaque instance est une structure sous laquelle se trouve une structureInstances. Ce qui suit est une sortie partielle qui inclut les champs marqués avec italics. Nous allons fournir des exemples qui utilisent ces champs pour spécifier un chemin d'attribut à partir de la structure de la JSON sortie.

{ "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", ... }, ... { ... } ], "OwnerId": "123456789012", "ReservationId": "r-aaaaaabbbbb111111" }, ... ] }

Pour sélectionner des instances dans une zone de disponibilité spécifique à l'aide d'un filtre de ressources, spécifiez le chemin d'attribut AvailabilityZone et le code de la zone de disponibilité comme valeur. Par exemple :

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

Pour sélectionner des instances dans un sous-réseau spécifique à l'aide d'un filtre de ressources, spécifiez le chemin d'attribut SubnetId et l'ID du sous-réseau comme valeur. Par exemple :

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

Pour sélectionner des instances qui se trouvent dans un état d'instance spécifique, spécifiez le chemin d'attribut Name et l'un des noms d'état suivants comme valeur : pending | running | shutting-down | terminated | stopping |stopped. Par exemple :

"filters": [ { "path": "State.Name", "values": [ "running" ] } ],
Exemple : RDS cluster Amazon (cluster de base de données)

Lorsque vous spécifiez un filtre pour une action qui prend en charge le type de ressource aws:rds:cluster, vous exécutez AWS FIS la RDS describe-db-clusters commande Amazon et appliquez le filtre pour identifier les cibles.

La describe-db-clusters commande renvoie une JSON sortie similaire à la suivante pour chaque cluster de base de données. Ce qui suit est une sortie partielle qui inclut les champs marqués avec italics. Nous allons fournir des exemples qui utilisent ces champs pour spécifier un chemin d'attribut à partir de la structure de la JSON sortie.

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

Pour appliquer un filtre de ressources qui renvoie uniquement les clusters de base de données qui utilisent un moteur de base de données spécifique, spécifiez le chemin d'attribut Engine et la valeur aurora-postgresql comme indiqué dans l'exemple suivant.

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

Pour appliquer un filtre de ressources qui renvoie uniquement les clusters de base de données d'une zone de disponibilité spécifique, spécifiez le chemin et la valeur de l'attribut, comme indiqué dans l'exemple suivant.

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