Ziele für AWS FIS - AWS Fehlerinjektionsservice

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Ziele für AWS FIS

Ein Ziel ist eine oder mehrere AWS Ressourcen, für die der AWS AWS Fault Injection Service (FIS) während eines Experiments eine Aktion ausführt. Ziele können sich in demselben AWS-Konto wie das Experiment oder in einem anderen Konto befinden, wenn ein Experiment mit mehreren Konten verwendet wird. Weitere Informationen zum Targeting von Ressourcen in einem anderen Konto finden Sie unterArbeiten mit Multi-Account-Experimenten für AWS FIS.

Sie definieren Ziele, wenn Sie eine Versuchsvorlage erstellen. Sie können dasselbe Ziel für mehrere Aktionen in Ihrer Experimentvorlage verwenden.

AWS FIS identifiziert alle Ziele zu Beginn des Experiments, bevor eine der Aktionen im Aktionssatz gestartet wird. AWS FIS verwendet die Zielressourcen, die es für das gesamte Experiment auswählt. Wenn keine Ziele gefunden werden, schlägt das Experiment fehl.

Zielsyntax

Das Folgende ist die Syntax für ein Ziel.

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

Wenn Sie ein Ziel definieren, geben Sie Folgendes an:

target_name

Ein Name für das Ziel.

resourceType

Der Ressourcentyp.

resourceArns

Die Amazon-Ressourcennamen (ARN) bestimmter Ressourcen.

resourceTags

Die Tags, die auf bestimmte Ressourcen angewendet wurden.

parameters

Die Parameter, die Ziele anhand bestimmter Attribute identifizieren.

filters

Der Ressourcenfilter erfasst die identifizierten Zielressourcen anhand bestimmter Attribute.

selectionMode

Der Auswahlmodus für die identifizierten Ressourcen.

Beispiele finden Sie unter Beispielziele.

Ressourcentypen

Jede AWS FIS-Aktion wird für einen bestimmten AWS Ressourcentyp ausgeführt. Wenn Sie ein Ziel definieren, müssen Sie genau einen Ressourcentyp angeben. Wenn Sie ein Ziel für eine Aktion angeben, muss es sich bei dem Ziel um den Ressourcentyp handeln, der von der Aktion unterstützt wird.

Die folgenden Ressourcentypen werden von AWS FIS unterstützt:

  • aws:dynamodb:global-table — Eine globale Amazon DynamoDB-Tabelle

  • aws:ec2:autoscaling-group — Eine Amazon Auto Scaling Scaling-Gruppe EC2

  • aws:ec2:ebs-volume — Ein Amazon EBS-Volume

  • aws:ec2:instance — Eine Amazon-Instance EC2

  • aws:ec2:spot-instance — Eine Amazon Spot-Instance EC2

  • aws:ec2:subnet — Ein Amazon VPC-Subnetz

  • aws:ec2:transit-gateway — Ein Transit-Gateway

  • aws:ecs:cluster — Ein Amazon ECS-Cluster

  • aws:ecs:task — Eine Amazon ECS-Aufgabe

  • aws:eks:cluster — Ein Amazon EKS-Cluster

  • aws:eks:nodegroup — Eine Amazon EKS-Knotengruppe

  • aws:eks:pod — Ein Kubernetes-Pod

  • aws:elasticache:redis-replicationgroup — Eine (Redis OSS) Replikationsgruppe ElastiCache

  • aws:iam:role — Eine IAM-Rolle

  • aws:lambda:function — AWS Lambda Eine Funktion

  • aws:rds:cluster — Ein Amazon Aurora Aurora-DB-Cluster

  • aws:rds:db — Eine Amazon RDS-DB-Instance

  • aws:s3:bucket — Ein Amazon S3 S3-Bucket

Identifizieren Sie die Zielressourcen

Wenn Sie in der AWS FIS-Konsole ein Ziel definieren, können Sie bestimmte AWS Ressourcen (eines bestimmten Ressourcentyps) als Ziel auswählen. Oder Sie können AWS FIS anhand der von Ihnen angegebenen Kriterien eine Gruppe von Ressourcen identifizieren lassen.

Um Ihre Zielressourcen zu identifizieren, können Sie Folgendes angeben:

  • Ressource IDs — Die Ressource IDs bestimmter AWS Ressourcen. Alle Ressourcen IDs müssen denselben Ressourcentyp repräsentieren.

  • Ressourcen-Tags — Die Tags, die auf bestimmte AWS Ressourcen angewendet wurden.

  • Ressourcenfilter — Der Pfad und die Werte, die Ressourcen mit bestimmten Attributen repräsentieren. Weitere Informationen finden Sie unter Ressourcenfilter.

  • Ressourcenparameter — Die Parameter, die Ressourcen darstellen, die bestimmte Kriterien erfüllen. Weitere Informationen finden Sie unter Parameter für Ressourcen.

Überlegungen
  • Sie können nicht gleichzeitig eine Ressourcen-ID und ein Ressourcen-Tag für dasselbe Ziel angeben.

  • Sie können nicht gleichzeitig eine Ressourcen-ID und einen Ressourcenfilter für dasselbe Ziel angeben.

  • Wenn Sie ein Ressourcen-Tag mit einem leeren Tag-Wert angeben, entspricht dies nicht einem Platzhalter. Es entspricht Ressourcen, die ein Tag mit dem angegebenen Tag-Schlüssel und einem leeren Tag-Wert haben.

  • Wenn Sie mehr als ein Tag angeben, müssen alle angegebenen Tags auf der Zielressource vorhanden sein, damit sie ausgewählt werden kann (AND).

Ressourcenfilter

Ressourcenfilter sind Abfragen, die Zielressourcen anhand bestimmter Attribute identifizieren. AWS FIS wendet die Abfrage auf die Ausgabe einer API-Aktion an, die die kanonische Beschreibung der AWS Ressource entsprechend dem von Ihnen angegebenen Ressourcentyp enthält. Ressourcen mit Attributen, die der Abfrage entsprechen, sind in der Zieldefinition enthalten.

Jeder Filter wird als Attributpfad und mögliche Werte ausgedrückt. Ein Pfad ist eine durch Punkte getrennte Folge von Elementen, die in der Ausgabe der Aktion „Beschreiben“ für eine Ressource den Pfad zum Erreichen eines Attributs beschreiben. Jede Periode steht für die Erweiterung eines Elements. Jedes Element muss in Pascal-Groß- und Kleinschreibung ausgedrückt werden, auch wenn die Ausgabe der Aktion Describe für eine Ressource in Camel-Groß- und Kleinschreibung erfolgt. Zum Beispiel sollten SieAvailabilityZone, nicht availablityZone als Attributelement verwenden.

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

Die folgende Logik gilt für alle Ressourcenfilter:

  • Wenn mehrere Filter bereitgestellt werden, einschließlich Filter mit demselben Pfad, müssen alle Filter übereinstimmen, damit eine Ressource ausgewählt werden kann — AND

  • Wenn mehrere Werte für einen einzelnen Filter angegeben werden, muss ein beliebiger Wert abgeglichen werden, damit eine Ressource ausgewählt werden kann — OR

  • Wenn an der Pfadposition des Describe-API-Aufrufs mehrere Werte gefunden werden, muss ein beliebiger Wert abgeglichen werden, damit eine Ressource ausgewählt werden kann — OR

  • Um anhand von Tag-Schlüssel/Wert-Paaren abzugleichen, sollten Sie die Zielressourcen stattdessen anhand von Tags auswählen (siehe oben).

Die folgende Tabelle enthält die API-Aktionen und AWS CLI -Befehle, mit denen Sie die kanonischen Beschreibungen für jeden Ressourcentyp abrufen können. AWS FIS führt diese Aktionen in Ihrem Namen aus, um die von Ihnen angegebenen Filter anzuwenden. In der entsprechenden Dokumentation werden die Ressourcen beschrieben, die standardmäßig in den Ergebnissen enthalten sind. Beispielsweise könnte die Dokumentation für DescribeInstances Staaten, in denen Instanzen kürzlich beendet wurden, in den Ergebnissen erscheinen.

Beispiele finden Sie unter Beispielfilter.

Parameter für Ressourcen

Ressourcenparameter identifizieren Zielressourcen nach bestimmten Kriterien.

Der folgende Ressourcentyp unterstützt Parameter.

aws:ec2:ebs-volume
  • availabilityZoneIdentifier— Der Code (z. B. us-east-1a) der Availability Zone, die die Zielvolumes enthält.

aws:ec2:subnet
  • availabilityZoneIdentifier— Der Code (z. B. us-east-1a) oder die AZ-ID (z. B. use1-az1) der Availability Zone, die die Zielsubnetze enthält.

  • vpc— Die VPC, die die Zielsubnetze enthält. Unterstützt nicht mehr als eine VPC pro Konto.

aws:ecs:task
  • cluster— Der Cluster, der die Zielaufgaben enthält.

  • service— Der Dienst, der die Zielaufgaben enthält.

aws:eks:pod
  • availabilityZoneIdentifier Optional. Die Availability Zone, die die Ziel-Pods enthält. Beispiel, us-east-1d. Wir bestimmen die Availability Zone eines Pods, indem wir seine Host-IP und die CIDR des Cluster-Subnetzes vergleichen.

  • clusterIdentifier – Erforderlich. Der Name oder ARN des EKS-Ziel-Clusters.

  • namespace – Erforderlich. Der Kubernetes-Namespace der Ziel-Pods.

  • selectorType – Erforderlich. Der Selektortyp. Die möglichen Werte sind labelSelector, deploymentName und podName.

  • selectorValue – Erforderlich. Der Selektorwert. Dieser Wert hängt vom Wert von selectorType ab.

  • targetContainerName Optional. Der Name des Zielcontainers, wie in der Pod-Spezifikation definiert. Die Standardeinstellung ist der erste Container, der in jeder Ziel-Pod-Spezifikation definiert ist.

aws:lambda:function
  • functionQualifier Optional. Die Version oder der Alias der Zielfunktion. Wenn kein Qualifier angegeben ist, werden alle Aufrufe für das Targeting berücksichtigt. Wenn ein Alias mit mehreren Versionen angegeben wird, werden alle im Alias enthaltenen Versionen für das Targeting berücksichtigt, sofern sie mit einem ARN aufgerufen werden, der den Alias enthält. Wenn der spezielle Alias verwendet $LATEST wird, werden Aufrufe der Basisfunktion ARN und Aufrufe, die $LATEST im ARN enthalten sind, für die Fehlerinjektion berücksichtigt. Weitere Informationen zu Lambda-Versionen finden Sie im AWS Lambda Benutzerhandbuch unter Lambda-Funktionsversionen verwalten.

aws:rds:cluster
  • writerAvailabilityZoneIdentifiers Optional. Die Availability Zones des Writers des DB-Clusters. Mögliche Werte sind: eine durch Kommas getrennte Liste von Availability Zone-Identifikatoren,. all

aws:rds:db
  • availabilityZoneIdentifiers Optional. Die Availability Zones der DB-Instance, die betroffen sein soll. Mögliche Werte sind: eine durch Kommas getrennte Liste von Availability Zone-Identifikatoren,. all

aws:elasticache:redis-replicationgroup
  • availabilityZoneIdentifier – Erforderlich. Der Code (z. B. us-east-1a) oder die AZ-ID (z. B. use1-az1) der Availability Zone, die die Zielknoten enthält.

Auswahlmodus

Sie können die identifizierten Ressourcen eingrenzen, indem Sie einen Auswahlmodus angeben. AWS FIS unterstützt die folgenden Auswahlmodi:

  • ALL— Führt die Aktion auf allen Zielen aus.

  • COUNT(n)— Führt die Aktion für die angegebene Anzahl von Zielen aus, die nach dem Zufallsprinzip aus den identifizierten Zielen ausgewählt wurden. Beispielsweise wählt COUNT (1) eines der identifizierten Ziele aus.

  • PERCENT(n)— Führt die Aktion für den angegebenen Prozentsatz von Zielen aus, die nach dem Zufallsprinzip aus den identifizierten Zielen ausgewählt wurden. PERCENT (25) wählt beispielsweise 25% der identifizierten Ziele aus.

Wenn Sie über eine ungerade Anzahl von Ressourcen verfügen und 50% angeben, rundet AWS FIS ab. Wenn Sie beispielsweise fünf EC2 Amazon-Instances als Ziele hinzufügen und den Umfang auf 50% erhöhen, rundet AWS FIS auf zwei Instances ab. Sie können keinen Prozentsatz angeben, der weniger als eine Ressource ist. Wenn Sie beispielsweise vier EC2 Amazon-Instances hinzufügen und den Umfang auf 5% erhöhen, kann AWS FIS keine Instance auswählen.

Wenn Sie mehrere Ziele mit demselben Zielressourcentyp definieren, kann AWS FIS dieselbe Ressource mehrmals auswählen.

Unabhängig davon, welchen Auswahlmodus Sie verwenden, schlägt das Experiment fehl, wenn der von Ihnen angegebene Bereich keine Ressourcen identifiziert.

Beispielziele

Im Folgenden finden Sie Beispielziele.

Beispiel: Instances in der angegebenen VPC mit den angegebenen Tags

Die möglichen Ziele für dieses Beispiel sind EC2 Amazon-Instances in der angegebenen VPC mit dem Tag env=prod. Der Auswahlmodus legt fest, dass AWS FIS eines dieser Ziele nach dem Zufallsprinzip auswählt.

{ "targets": { "randomInstance": { "resourceType": "aws:ec2:instance", "resourceTags": { "env": "prod" }, "filters": [ { "path": "VpcId", "values": [ "vpc-aabbcc11223344556" ] } ], "selectionMode": "COUNT(1)" } } }
Beispiel: Aufgaben mit den angegebenen Parametern

Die möglichen Ziele für dieses Beispiel sind Amazon ECS-Aufgaben mit dem angegebenen Cluster und Service. Der Auswahlmodus gibt an, dass AWS FIS eines dieser Ziele nach dem Zufallsprinzip auswählt.

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

Beispielfilter

Im Folgenden finden Sie Beispielfilter.

Beispiel: EC2 Instanzen

Wenn Sie einen Filter für eine Aktion angeben, die den Ressourcentyp aws:ec2:instance unterstützt, verwendet AWS FIS den EC2 describe-instances Amazon-Befehl und wendet den Filter an, um die Ziele zu identifizieren.

Der describe-instances Befehl gibt eine JSON-Ausgabe zurück, in der sich jede Instance einer Struktur unterordnet. Instances Im Folgenden finden Sie eine Teilausgabe, die Felder enthält, die mit gekennzeichnet sinditalics. Wir werden Beispiele bereitstellen, die diese Felder verwenden, um einen Attributpfad aus der Struktur der JSON-Ausgabe anzugeben.

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

Um mithilfe eines Ressourcenfilters Instanzen in einer bestimmten Availability Zone auszuwählen, geben Sie den Attributpfad für AvailabilityZone und den Code für die Availability Zone als Wert an. Zum Beispiel:

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

Um Instances in einem bestimmten Subnetz mithilfe eines Ressourcenfilters auszuwählen, geben Sie den Attributpfad für SubnetId und die ID des Subnetzes als Wert an. Zum Beispiel:

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

Um Instances auszuwählen, die sich in einem bestimmten Instanzstatus befinden, geben Sie den Attributpfad für Name und einen der folgenden Statusnamen als Wert an: pending | | | running | shutting-down terminated |stopping. stopped Zum Beispiel:

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

Um Instances auszuwählen, denen eine beliebige Anzahl von Sicherheitsgruppen angehängt ist, geben Sie einen einzelnen Filter mit dem Attributpfad für GroupId und mehrere Sicherheitsgruppen an IDs. Zum Beispiel:

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

Um Instances auszuwählen, denen alle Sicherheitsgruppen angehängt sind, geben Sie mehrere Filter mit dem Attributpfad für GroupId und eine einzelne Sicherheitsgruppen-ID für jeden Filter an. Zum Beispiel:

"filters": [ { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-a0011223344556677" ] }, { "path": "NetworkInterfaces.Groups.GroupId", "values": [ "sg-b9988776655443322" ] } ],
Beispiel: Amazon RDS-Cluster (DB-Cluster)

Wenn Sie einen Filter für eine Aktion angeben, die den Ressourcentyp aws:rds:cluster unterstützt, führt AWS FIS den Amazon describe-db-clusters RDS-Befehl aus und wendet den Filter an, um die Ziele zu identifizieren.

Der describe-db-clusters Befehl gibt für jeden DB-Cluster eine JSON-Ausgabe zurück, die der folgenden ähnelt. Das Folgende ist eine Teilausgabe, die Felder enthält, die mit gekennzeichnet sinditalics. Wir werden Beispiele bereitstellen, die diese Felder verwenden, um einen Attributpfad aus der Struktur der JSON-Ausgabe anzugeben.

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

Um einen Ressourcenfilter anzuwenden, der nur die DB-Cluster zurückgibt, die eine bestimmte DB-Engine verwenden, geben Sie den Attributpfad als Engine und den Wert an, aurora-postgresql wie im folgenden Beispiel gezeigt.

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

Um einen Ressourcenfilter anzuwenden, der nur die DB-Cluster in einer bestimmten Availability Zone zurückgibt, geben Sie den Attributpfad und den Wert an, wie im folgenden Beispiel gezeigt.

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