Objectifs pour le 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 le AWS FIS

Une cible est une ou plusieurs AWS ressources sur lesquelles une action est exécutée par le AWS Fault Injection Service (AWS FIS) au cours d'une expérience. Les cibles peuvent se trouver sur le même compte AWS que le test, ou sur un autre compte dans le cadre d'un test 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 Le FIS identifie toutes les cibles au début de l'expérience, avant de lancer l'une des actions définies. AWS Le FIS utilise 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 :

nom_cible

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 pour les ressources identifiées.

Pour obtenir des exemples, consultez Exemples de cibles.

Types de ressources

Chaque action AWS FIS 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 le AWS FIS :

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

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

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

  • aws:ec2:instance — Une instance Amazon EC2

  • aws:ec2:spot-instance — Une instance Spot Amazon 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

  • 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 console AWS FIS, vous pouvez choisir des AWS ressources spécifiques (d'un type de ressource spécifique) à cibler. Vous pouvez également laisser le 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 :

  • ID de ressource : ID de ressource de AWS ressources spécifiques. Tous les identifiants de ressources 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 plus d’informations, consultez Filtres de ressources.

  • Paramètres des ressources : paramètres qui représentent les ressources répondant à des critères spécifiques. Pour plus d’informations, consultez 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 FIS applique la requête à la sortie d'une action d'API 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 actions et AWS CLI commandes d'API que vous pouvez utiliser pour obtenir les descriptions canoniques de chaque type de ressource. AWS FIS exé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— Le VPC qui contient les sous-réseaux cibles. Ne 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 le CIDR du sous-réseau du cluster.

  • clusterIdentifier : obligatoire. Le nom ou l'ARN du cluster EKS 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 FIS prend 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 %, le AWS FIS arrondit à la valeur inférieure. Par exemple, si vous ajoutez cinq instances Amazon EC2 comme cibles et que vous avez une portée de 50 %, AWS FIS arrondit à deux instances. Vous ne pouvez pas spécifier un pourcentage inférieur à une ressource. Par exemple, si vous ajoutez quatre instances Amazon EC2 et que la portée est de 5 %, AWS FIS ne peut pas sélectionner d'instance.

Si vous définissez plusieurs cibles en utilisant le même type de ressource cible, AWS FIS peut 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 du VPC spécifié avec les balises spécifiées

Les cibles possibles pour cet exemple sont les instances Amazon EC2 dans le VPC spécifié avec le tag. env=prod Le mode de sélection indique que le AWS FIS choisit l'une de ces cibles 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 tâches Amazon ECS avec le cluster et le service spécifiés. Le mode de sélection indique que le AWS FIS choisit l'une de ces cibles 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 : instances EC2

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

La describe-instances commande renvoie une sortie JSON dans laquelle chaque instance est une structure sous laquelle se trouve une structureInstances. Ce qui suit est une sortie partielle qui inclut des champs marqués en italique. Nous fournirons des exemples qui utilisent ces champs pour spécifier un chemin d'attribut à partir de la structure de la sortie 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", ... }, ... { ... } ], "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 : cluster Amazon RDS (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, FIS AWS exécute la describe-db-clusters commande Amazon RDS et applique le filtre pour identifier les cibles.

La describe-db-clusters commande renvoie une sortie JSON similaire à la suivante pour chaque cluster de base de données. Ce qui suit est une sortie partielle qui inclut des champs marqués en italique. Nous fournirons des exemples qui utilisent ces champs pour spécifier un chemin d'attribut à partir de la structure de la sortie 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", ... } ]

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