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.
Verwenden von Aktionsausgaben als Eingaben
Verschiedene Automatisierungs-Aktionen geben vordefinierte Ausgaben zurück. Sie können diese Ausgaben mithilfe des Formats {{ als Eingaben an spätere Schritte in Ihrem Runbook übergeben. Sie können benutzerdefinierte Ausgaben für Automatisierungs-Aktionen in Ihren Runbooks definieren. Auf diese Weise können Sie Skripts ausführen oder API-Operationen für andere AWS-Services einmalig aufrufen, sodass Sie die Werte als Eingaben in späteren Aktionen wiederverwenden können. Parametertypen in Runbooks sind statisch. Dies bedeutet, dass der Parametertyp nicht geändert werden kann, nachdem er definiert wurde. Um eine Schrittausgabe zu definieren, geben Sie die folgenden Felder an:stepName.outputName}}
-
Name: (Erforderlich) Der Ausgabename, der in späteren Schritten verwendet wird, um auf den Ausgabewert zu verweisen.
-
Selektor: (Erforderlich) Der JSONPath Ausdruck, der zur Bestimmung des Ausgabewerts verwendet wird.
-
Typ: (Optional) Der Datentyp des Werts, der vom Auswahlfeld zurückgegeben wird. Gültige Typwerte sind
String,Integer,Boolean,StringList,StringMap,MapList. Der Standardwert istString.
Wenn der Wert einer Ausgabe nicht dem von Ihnen angegebenen Datentyp entspricht, versucht Automation, den Datentyp zu konvertieren. Wenn der zurückgegebene Wert beispielsweise ein Integer ist, der angegebene Type jedoch ein String ist, ist der endgültige Ausgabewert ein String-Wert. Die folgenden Typkonvertierungen werden unterstützt:
-
String-Werte können inStringList,IntegerundBooleanumgewandelt werden. -
Integer-Werte können inStringundStringListumgewandelt werden. -
Boolean-Werte können inStringundStringListumgewandelt werden. -
StringList-,IntegerList-, oderBooleanList-Werte, die ein Element enthalten, können inString,IntegeroderBooleanumgewandelt werden.
Bei der Verwendung von Parametern oder Ausgaben mit Automatisierungs-Aktionen kann der Datentyp nicht dynamisch innerhalb der Eingabe einer Aktion geändert werden.
Hier ist ein Beispiel-Runbook, das veranschaulicht, wie Sie Aktionsausgaben definieren und auf den Wert als Eingabe für eine spätere Aktion verweisen. Die Runbooks tun Folgendes:
-
Verwendet die
aws:executeAwsApiAktion, um den EC2 DescribeImages Amazon-API-Vorgang aufzurufen, um den Namen eines bestimmten Windows Server 2016 abzurufenAMI. Es gibt die Image-ID alsImageIdaus. -
Verwendet die
aws:executeAwsApiAktion, um den EC2 RunInstances Amazon-API-Vorgang aufzurufen, um eine Instance zu starten, die denImageIdaus dem vorherigen Schritt verwendet. Es gibt die Instance-ID alsInstanceIdaus. -
Verwendet die
aws:waitForAwsResourcePropertyAktion, um den EC2 DescribeInstanceStatus Amazon-API-Vorgang abzufragen, um darauf zu warten, dass die Instance denrunningStatus erreicht. Die Aktion endet nach 60 Sekunden durch Timeout. Der Schritt endet durch Timeout, wenn die Instance nach 60 Sekunden Abfrage nicht den Statusrunningerreicht. -
Verwendet die
aws:assertAwsResourcePropertyAktion, um den EC2DescribeInstanceStatusAmazon-API-Vorgang aufzurufen, um zu bestätigen, dass sich die Instance imrunningStatus befindet. Der Schritt schlägt fehl, wenn der Status der Instance nichtrunningist.
--- description: Sample runbook using AWS API operations schemaVersion: '0.3' assumeRole: "{{ AutomationAssumeRole }}" parameters: AutomationAssumeRole: type: String description: "(Optional) The ARN of the role that allows Automation to perform the actions on your behalf." default: '' ImageName: type: String description: "(Optional) Image Name to launch EC2 instance with." default: "Windows_Server-2022-English-Full-Base*" mainSteps: - name: getImageId action: aws:executeAwsApi inputs: Service: ec2 Api: DescribeImages Filters: - Name: "name" Values: - "{{ ImageName }}" outputs: - Name: ImageId Selector: "$.Images[0].ImageId" Type: "String" - name: launchOneInstance action: aws:executeAwsApi inputs: Service: ec2 Api: RunInstances ImageId: "{{ getImageId.ImageId }}" MaxCount: 1 MinCount: 1 outputs: - Name: InstanceId Selector: "$.Instances[0].InstanceId" Type: "String" - name: waitUntilInstanceStateRunning action: aws:waitForAwsResourceProperty timeoutSeconds: 60 inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running - name: assertInstanceStateRunning action: aws:assertAwsResourceProperty inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running outputs: - "launchOneInstance.InstanceId" ...
Sie können mit jeder der oben beschriebenen Automatisierungsaktionen eine bestimmte API-Operation aufrufen, indem Sie den Service-Namespace, den Namen der API-Operation, die Eingabeparameter und die Ausgabeparameter angeben. Eingaben werden von der ausgewählten API-Operation bestimmt. Sie können die API-Operationen (auch als Methoden bezeichnet) anzeigen, indem Sie einen Service in der linken Navigationsleiste auf der folgenden Service-Referenzen
Sie können das Schema für jede Automatisierungsaktion an den folgenden Orten anzeigen:
Die Schemata umfassen Beschreibungen der erforderlichen Felder für jede Aktion.
Verwendung der Selector/PropertySelector Felder
Jede Automatisierungsaktion erfordert, dass Sie entweder eine Ausgabe Selector (für aws:executeAwsApi) oder einen PropertySelector (für aws:assertAwsResourceProperty und aws:waitForAwsResourceProperty) enthalten. Diese Felder werden verwendet, um die JSON-Antwort aus einer AWS API-Operation zu verarbeiten. Diese Felder verwenden die JSONPath Syntax.
Hier finden Sie ein Beispiel, das dieses Konzept für die Aktion aws:executeAwsAPi erläutert.
--- mainSteps: - name: getImageId action: aws:executeAwsApi inputs: Service: ec2 Api: DescribeImages Filters: - Name: "name" Values: - "{{ ImageName }}" outputs: - Name: ImageId Selector: "$.Images[0].ImageId" Type: "String" ...
Im aws:executeAwsApi-SchrittgetImageId ruft die Automatisierung die DescribeImages-API-Operation auf und empfängt eine Antwort von ec2. Die Automatisierung wendet dann Selector -
"$.Images[0].ImageId" auf die API-Antwort an und weist der ImageId-Ausgabevariablen den ausgewählten Wert zu. Weitere Schritte in dieser Automatisierung können den Wert von ImageId verwenden, indem "{{ getImageId.ImageId
}}" angegeben wird.
Hier finden Sie ein Beispiel, das dieses Konzept für die Aktion aws:waitForAwsResourceProperty erläutert.
--- - name: waitUntilInstanceStateRunning action: aws:waitForAwsResourceProperty # timeout is strongly encouraged for action - aws:waitForAwsResourceProperty timeoutSeconds: 60 inputs: Service: ec2 Api: DescribeInstanceStatus InstanceIds: - "{{ launchOneInstance.InstanceId }}" PropertySelector: "$.InstanceStatuses[0].InstanceState.Name" DesiredValues: - running ...
Im aws:waitForAwsResourceProperty-SchrittwaitUntilInstanceStateRunning ruft die Automatisierung die DescribeInstanceStatus-API-Operation auf und empfängt eine Antwort von ec2. Die Automatisierung wendet dann PropertySelector -
"$.InstanceStatuses[0].InstanceState.Name" auf die Antwort an und prüft, ob der angegebene zurückgegebene Wert einem Wert in der Liste DesiredValues entspricht (in diesem Fall running). Der Schritt wiederholt den Prozess, bis die Antwort den Instance-Status running zurückgibt.
Verwendung JSONPath in Runbooks
Ein JSONPath Ausdruck ist eine Zeichenfolge, die mit „$“ beginnt. die zur Auswahl einer oder mehrerer Komponenten in einem JSON-Element verwendet wird. Die folgende Liste enthält Informationen zu JSONPath Operatoren, die von Systems Manager Automation unterstützt werden:
-
Dot-notated child (.): Verwendung mit einem JSON-Objekt. Dieser Operator wählt den Wert eines bestimmten Schlüssels aus.
-
Deep-scan (..): Verwendung mit einem JSON-Element. Dieser Operator untersucht das JSON-Element Ebene für Ebene und wählt eine Liste von Werten mit dem spezifischen Schlüssel aus. Der Rückgabetyp dieses Operators ist immer ein JSON-Array. Im Kontext eines Ausgabetyps einer Automatisierungsaktion kann der Operator entweder StringList oder sein MapList.
-
Array-Index ([ ]): Verwendung mit einem JSON-Array. Dieser Operator ruft den Wert eines bestimmten Index ab.
-
Filter ([? (
expression)]): Wird mit einem JSON-Array verwendet. Dieser Operator filtert JSON-Array-Werte, die den im Filterausdruck definierten Kriterien entsprechen. Filterausdrücke können nur die folgenden Operatoren verwenden: ==,! =, >, <, >= oder <=. Die Kombination mehrerer Filterausdrücke mit AND (&&) oder OR (||) wird nicht unterstützt. Der Rückgabetyp dieses Operators ist immer ein JSON-Array.
Um JSONPath Operatoren besser zu verstehen, lesen Sie sich die folgende JSON-Antwort aus dem DescribeInstances ec2-API-Vorgang durch. Auf diese Antwort folgen mehrere Beispiele, die unterschiedliche Ergebnisse zeigen, indem unterschiedliche JSONPath Ausdrücke auf die Antwort aus dem DescribeInstances API-Vorgang angewendet werden.
{ "NextToken": "abcdefg", "Reservations": [ { "OwnerId": "123456789012", "ReservationId": "r-abcd12345678910", "Instances": [ { "ImageId": "ami-12345678", "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "Status": "attached", "VolumeId": "vol-000000000000" }, "DeviceName": "/dev/xvda" } ], "State": { "Code": 16, "Name": "running" } } ], "Groups": [] }, { "OwnerId": "123456789012", "ReservationId": "r-12345678910abcd", "Instances": [ { "ImageId": "ami-12345678", "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "Status": "attached", "VolumeId": "vol-111111111111" }, "DeviceName": "/dev/xvda" } ], "State": { "Code": 80, "Name": "stopped" } } ], "Groups": [] } ] }
JSONPath Beispiel 1: Rufen Sie eine bestimmte Zeichenfolge aus einer JSON-Antwort ab
JSONPath: $.Reservations[0].Instances[0].ImageId Returns: "ami-12345678" Type: String
JSONPath Beispiel 2: Rufen Sie einen bestimmten booleschen Wert aus einer JSON-Antwort ab
JSONPath: $.Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.DeleteOnTermination Returns: true Type: Boolean
JSONPath Beispiel 3: Holen Sie sich eine bestimmte Ganzzahl aus einer JSON-Antwort
JSONPath: $.Reservations[0].Instances[0].State.Code Returns: 16 Type: Integer
JSONPath Beispiel 4: Eine JSON-Antwort gründlich scannen und dann alle Werte für VolumeId als StringList
JSONPath: $.Reservations..BlockDeviceMappings..VolumeId Returns: [ "vol-000000000000", "vol-111111111111" ] Type: StringList
JSONPath Beispiel 5: Holen Sie sich ein bestimmtes BlockDeviceMappings Objekt als StringMap
JSONPath: $.Reservations[0].Instances[0].BlockDeviceMappings[0] Returns: { "Ebs" : { "DeleteOnTermination" : true, "Status" : "attached", "VolumeId" : "vol-000000000000" }, "DeviceName" : "/dev/xvda" } Type: StringMap
JSONPath Beispiel 6: Tiefenscan einer JSON-Antwort und Abrufen aller State-Objekte als MapList
JSONPath: $.Reservations..Instances..State Returns: [ { "Code" : 16, "Name" : "running" }, { "Code" : 80, "Name" : "stopped" } ] Type: MapList
JSONPath Beispiel 7: Filtern Sie nach Instanzen im running Bundesstaat
JSONPath: $.Reservations..Instances[?(@.State.Name == 'running')] Returns: [ { "ImageId": "ami-12345678", "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "Status": "attached", "VolumeId": "vol-000000000000" }, "DeviceName": "/dev/xvda" } ], "State": { "Code": 16, "Name": "running" } } ] Type: MapList
JSONPath Beispiel 8: Gibt die Anzahl ImageId der Instanzen zurück, die sich nicht im running Status befinden
JSONPath: $.Reservations..Instances[?(@.State.Name != 'running')].ImageId Returns: [ "ami-12345678" ] Type: StringList | String