View a markdown version of this page

Exemple AWS Modèles d'expériences FIS - AWS Service d'injection par défaut

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.

Exemple AWS Modèles d'expériences FIS

Si vous utilisez l'API AWS FIS ou un outil de ligne de commande pour créer un modèle d'expérience, vous pouvez créer le modèle en notation d' JavaScript objet (JSON). Pour plus d'informations sur les composants d'un modèle d'expérience, consultezAWS Composants du modèle d'expérience FIS.

Pour créer une expérience à l'aide de l'un des exemples de modèles, enregistrez-la dans un fichier JSON (par exemplemy-template.json), remplacez les valeurs des espaces réservés italics par vos propres valeurs, puis exécutez la commande https://docs.aws.amazon.com/cli/latest/reference/fis/create-experiment-template.html create-experiment-template suivante.

aws fis create-experiment-template --cli-input-json file://my-template.json

Arrêtez les instances EC2 en fonction de filtres

L'exemple suivant arrête toutes les instances Amazon EC2 en cours d'exécution dans la région spécifiée avec la balise spécifiée dans le VPC spécifié. Il les redémarre au bout de deux minutes.

{ "tags": { "Name": "StopEC2InstancesWithFilters" }, "description": "Stop and restart all instances in us-east-1b with the tag env=prod in the specified VPC", "targets": { "myInstances": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "Placement.AvailabilityZone", "values": ["us-east-1b"] }, { "path": "State.Name", "values": ["running"] }, { "path": "VpcId", "values": [ "vpc-aabbcc11223344556"] } ], "selectionMode": "ALL" } }, "actions": { "StopInstances": { "actionId": "aws:ec2:stop-instances", "description": "stop the instances", "parameters": { "startInstancesAfterDuration": "PT2M" }, "targets": { "Instances": "myInstances" } } }, "stopConditions": [ { "source": "aws:cloudwatch:alarm", "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name" }

Arrêter un nombre spécifié d'instances EC2

L'exemple suivant arrête trois instances avec la balise spécifiée. AWS Le FIS sélectionne les instances spécifiques à arrêter au hasard. Il redémarre ces instances au bout de deux minutes.

{ "tags": { "Name": "StopEC2InstancesByCount" }, "description": "Stop and restart three instances with the specified tag", "targets": { "myInstances": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "selectionMode": "COUNT(3)" } }, "actions": { "StopInstances": { "actionId": "aws:ec2:stop-instances", "description": "stop the instances", "parameters": { "startInstancesAfterDuration": "PT2M" }, "targets": { "Instances": "myInstances" } } }, "stopConditions": [ { "source": "aws:cloudwatch:alarm", "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name" }

Exécutez un programme préconfiguré AWS Document SSM de la FIS

L'exemple suivant exécute une injection par défaut du processeur pendant 60 secondes sur l'instance EC2 spécifiée à l'aide d'un document AWS FIS SSM préconfiguré. AWSFIS-Run-CPU-Stress AWS Le FIS surveille l'expérience pendant deux minutes.

{ "tags": { "Name": "CPUStress" }, "description": "Run a CPU fault injection on the specified instance", "targets": { "myInstance": { "resourceType": "aws:ec2:instance", "resourceArns": ["arn:aws:ec2:us-east-1:111122223333:instance/instance-id"], "selectionMode": "ALL" } }, "actions": { "CPUStress": { "actionId": "aws:ssm:send-command", "description": "run cpu stress using ssm", "parameters": { "duration": "PT2M", "documentArn": "arn:aws:ssm:us-east-1::document/AWSFIS-Run-CPU-Stress", "documentParameters": "{\"DurationSeconds\": \"60\", \"InstallDependencies\": \"True\", \"CPU\": \"0\"}" }, "targets": { "Instances": "myInstance" } } }, "stopConditions": [ { "source": "aws:cloudwatch:alarm", "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name" }

Exécuter un runbook d'automatisation prédéfini

L'exemple suivant publie une notification à Amazon SNS à l'aide d'un runbook fourni par Systems Manager. AWS-PublishSNSNotification Le rôle doit être autorisé à publier des notifications sur la rubrique SNS spécifiée.

{ "description": "Publish event through SNS", "stopConditions": [ { "source": "none" } ], "targets": { }, "actions": { "sendToSns": { "actionId": "aws:ssm:start-automation-execution", "description": "Publish message to SNS", "parameters": { "documentArn": "arn:aws:ssm:us-east-1::document/AWS-PublishSNSNotification", "documentParameters": "{\"Message\": \"Hello, world\", \"TopicArn\": \"arn:aws:sns:us-east-1:111122223333:topic-name\"}", "maxDuration": "PT1M" }, "targets": { } } }, "roleArn": "arn:aws:iam::111122223333:role/role-name" }

Limiter les actions de l'API sur les instances EC2 avec le rôle IAM cible

L'exemple suivant limite 100 % des appels d'API spécifiés dans la définition d'action pour les appels d'API effectués par le ou les rôles IAM spécifiés dans la définition cible.

Note

Si vous souhaitez cibler des instances EC2 qui sont membres d'un groupe Auto Scaling, veuillez utiliser l'action aws:ec2:asg-insufficient-instance-capacity-error et ciblez plutôt par groupe Auto Scaling. Pour de plus amples informations, veuillez consulter aws:ec2:asg-insuffisent-instance-capacity error.

{ "tags": { "Name": "ThrottleEC2APIActions" }, "description": "Throttle the specified EC2 API actions on the specified IAM role", "targets": { "myRole": { "resourceType": "aws:iam:role", "resourceArns": ["arn:aws:iam::111122223333:role/role-name"], "selectionMode": "ALL" } }, "actions": { "ThrottleAPI": { "actionId": "aws:fis:inject-api-throttle-error", "description": "Throttle APIs for 5 minutes", "parameters": { "service": "ec2", "operations": "DescribeInstances,DescribeVolumes", "percentage": "100", "duration": "PT2M" }, "targets": { "Roles": "myRole" } } }, "stopConditions": [ { "source": "aws:cloudwatch:alarm", "value": "arn:aws:cloudwatch:us-east-1:111122223333:alarm:alarm-name" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name" }

Test de résistance du processeur des pods dans un cluster Kubernetes

L'exemple suivant utilise Chaos Mesh pour tester le processeur des modules d'un cluster Amazon EKS Kubernetes pendant une minute.

{ "description": "ChaosMesh StressChaos example", "targets": { "Cluster-Target-1": { "resourceType": "aws:eks:cluster", "resourceArns": [ "arn:aws:eks:arn:aws::111122223333:cluster/cluster-id" ], "selectionMode": "ALL" } }, "actions": { "TestCPUStress": { "actionId": "aws:eks:inject-kubernetes-custom-resource", "parameters": { "maxDuration": "PT2M", "kubernetesApiVersion": "chaos-mesh.org/v1alpha1", "kubernetesKind": "StressChaos", "kubernetesNamespace": "default", "kubernetesSpec": "{\"selector\":{\"namespaces\":[\"default\"],\"labelSelectors\":{\"run\":\"nginx\"}},\"mode\":\"all\",\"stressors\": {\"cpu\":{\"workers\":1,\"load\":50}},\"duration\":\"1m\"}" }, "targets": { "Cluster": "Cluster-Target-1" } } }, "stopConditions": [{ "source": "none" }], "roleArn": "arn:aws:iam::111122223333:role/role-name", "tags": {} }

L'exemple suivant utilise Litmus pour tester le processeur des pods d'un cluster Amazon EKS Kubernetes pendant une minute.

{ "description": "Litmus CPU Hog", "targets": { "MyCluster": { "resourceType": "aws:eks:cluster", "resourceArns": [ "arn:aws:eks:arn:aws::111122223333:cluster/cluster-id" ], "selectionMode": "ALL" } }, "actions": { "MyAction": { "actionId": "aws:eks:inject-kubernetes-custom-resource", "parameters": { "maxDuration": "PT2M", "kubernetesApiVersion": "litmuschaos.io/v1alpha1", "kubernetesKind": "ChaosEngine", "kubernetesNamespace": "litmus", "kubernetesSpec": "{\"engineState\":\"active\",\"appinfo\":{\"appns\":\"default\",\"applabel\":\"run=nginx\",\"appkind\":\"deployment\"},\"chaosServiceAccount\":\"litmus-admin\",\"experiments\":[{\"name\":\"pod-cpu-hog\",\"spec\":{\"components\":{\"env\":[{\"name\":\"TOTAL_CHAOS_DURATION\",\"value\":\"60\"},{\"name\":\"CPU_CORES\",\"value\":\"1\"},{\"name\":\"PODS_AFFECTED_PERC\",\"value\":\"100\"},{\"name\":\"CONTAINER_RUNTIME\",\"value\":\"docker\"},{\"name\":\"SOCKET_PATH\",\"value\":\"/var/run/docker.sock\"}]},\"probe\":[]}}],\"annotationCheck\":\"false\"}" }, "targets": { "Cluster": "MyCluster" } } }, "stopConditions": [{ "source": "none" }], "roleArn": "arn:aws:iam::111122223333:role/role-name", "tags": {} }

Exception de débit provisionnée pour un nombre spécifié de flux de données Kinesis

L'exemple suivant lance une exception de débit provisionnée pour 100 % des demandes, jusqu'à cinq flux de données Kinesis avec la balise spécifiée. AWS Le FIS sélectionne les flux à affecter de manière aléatoire. Au bout de 5 minutes, le défaut est supprimé.

{ "description": "Kinesis stream experiment", "targets": { "KinesisStreams-Target-1": { "resourceType": "aws:kinesis:stream", "resourceTags": { "tag-key": "tag-value" }, "selectionMode": "COUNT(5)" } }, "actions": { "kinesis": { "actionId": "aws:kinesis:stream-provisioned-throughput-exception", "description": "my-stream", "parameters": { "duration": "PT5M", "percentage": "100", "service": "kinesis" }, "targets": { "KinesisStreams": "KinesisStreams-Target-1" } } }, "stopConditions": [ { "source": "none" } ], "roleArn": "arn:aws:iam::111122223333:role/role-name", "tags": {}, "experimentOptions": { "accountTargeting": "single-account", "emptyTargetResolutionMode": "fail" } }

Exemple d'autorisations de rôle d'expérimentation

L'autorisation suivante vous permet d'exécuter les aws:kinesis:stream-expired-iterator-exception actions aws:kinesis:stream-provisioned-throughput-exception et sur un flux spécifique, ce qui a un impact sur 50 % des demandes.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:InjectApiError", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "kinesis:FisActionId": [ "aws:kinesis:stream-provisioned-throughput-exception", "aws:kinesis:stream-expired-iterator-exception" ], "kinesis:FisTargetArns": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream-name" ] }, "NumericEquals": { "kinesis:FisInjectPercentage": "50" } } }, { "Action": [ "kinesis:DescribeStreamSummary" ], "Resource": "*", "Effect": "Allow" } ] }