Verwenden einer TestState API zum Testen eines Zustands - AWS Step Functions

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 einer TestState API zum Testen eines Zustands

Die TestState API akzeptiert die Definition eines einzelnen Status und führt sie aus. Sie können einen Zustand testen, ohne einen Zustandsautomaten zu erstellen oder einen vorhandenen Zustandsautomaten zu aktualisieren.

Mit der TestState API können Sie Folgendes testen:

Um einen Status zu testen, können Sie auch die Step Functions Konsole , AWS Command Line Interface (AWS CLI)oder das SDK verwenden.

Die API übernimmt eine IAMTestState-Rolle, die die erforderlichen IAM Berechtigungen für die Ressourcen enthalten muss, auf die Ihr Status zugreift. Informationen zu den Berechtigungen, die ein Status möglicherweise benötigt, finden Sie unter IAM -Berechtigungen für die Verwendung der TestState API.

Überlegungen zur Verwendung der TestState API

Mit der TestState API können Sie jeweils nur einen Status testen. Zu den Status, die Sie testen können, gehören die folgenden:

Beachten Sie bei der Verwendung der TestState API die folgenden Überlegungen.

  • Die TestState API bietet keine Unterstützung für Folgendes:

  • Ein Test kann bis zu fünf Minuten lang ausgeführt werden. Wenn ein Test diese Dauer überschreitet, schlägt er mit dem States.Timeout Fehler fehl.

Verwenden von Inspektionsstufen in der TestState API

Um einen Status mithilfe der TestState API zu testen, geben Sie die Definition dieses Status an. Der Test gibt dann eine Ausgabe zurück. Für jeden Status können Sie den Detailumfang angeben, den Sie in den Testergebnissen anzeigen möchten. Diese Details enthalten zusätzliche Informationen über den Status, den Sie testen. Wenn Sie beispielsweise Eingabe- und Ausgabedatenverarbeitungsfilter wie InputPath oder ResultPath in einem -Zustand verwendet haben, können Sie die Zwischen- und Enddatenverarbeitungsergebnisse anzeigen.

Step Functions bietet die folgenden Ebenen, um die Details anzugeben, die Sie anzeigen möchten:

All diese Ebenen geben auch die nextState Felder status und zurück. status gibt den Status der Zustandsausführung an. Zum Beispiel , SUCCEEDEDFAILEDRETRIABLE, und CAUGHT_ERROR. nextState gibt den Namen des nächsten Status an, in den gewechselt werden soll. Wenn Sie in Ihrer Definition keinen nächsten Status definiert haben, gibt dieses Feld einen leeren Wert zurück.

Informationen zum Testen eines Zustands mit diesen Prüfstufen in der Step FunctionsKonsole und AWS CLIfinden Sie unter Testen eines Zustands (Konsole) und Testen eines Zustands mit AWS CLI.

INFO-inspectionLevel

Wenn der Test erfolgreich ist, zeigt diese Stufe die Statusausgabe an. Wenn der Test fehlschlägt, zeigt diese Stufe die Fehlerausgabe an. Standardmäßig Step Functions legt die Überprüfungsstufe auf INFO fest, wenn Sie keine Stufe angeben.

Die folgende Abbildung zeigt einen Test auf einen erfolgreichen Status „Bestanden“. Die Überprüfungsstufe für diesen Zustand ist auf INFO gesetzt und die Ausgabe für den Zustand wird auf der Registerkarte Ausgabe angezeigt.

Ausgabe eines ausgewählten Zustands, der einen Test für die INFO-Ebene erfolgreich ist.

Die folgende Abbildung zeigt einen Test, der für einen Aufgabenstatus fehlgeschlagen ist, wenn die Überprüfungsstufe auf INFO gesetzt ist. Auf der Registerkarte Ausgabe wird die Fehlerausgabe angezeigt, die den Fehlernamen und eine detaillierte Erklärung der Ursache für diesen Fehler enthält.

Ausgabe eines ausgewählten Zustands, der einen Test für die INFO-Ebene erfolgreich ist.

DEBUG-inspectionLevel

Wenn der Test erfolgreich ist, zeigt diese Stufe die Statusausgabe und das Ergebnis der Eingabe- und Ausgabedatenverarbeitung an.

Wenn der Test fehlschlägt, zeigt diese Stufe die Fehlerausgabe an. Diese Stufe zeigt die Zwischenergebnisse der Datenverarbeitung bis zum Zeitpunkt des Fehlers an. Angenommen, Sie haben einen Aufgabenstatus getestet, der eine Lambda Funktion aufruft. Angenommen, Sie hätten die OutputPath Filter InputPath, ParameterResultPath, und auf den Aufgabenstatus angewendet. Angenommen, der Aufruf ist fehlgeschlagen. In diesem Fall zeigt die DEBUG Ebene Datenverarbeitungsergebnisse basierend auf der Anwendung der Filter in der folgenden Reihenfolge an:

  • input – Rohstatuseingabe

  • afterInputPath – Eingabe nach Step Functions wendet den InputPath Filter an.

  • afterParameters – Die effektive Eingabe nach Step Functions wendet den Parameters Filter an.

Die in dieser Ebene verfügbaren Diagnoseinformationen können Ihnen helfen, Probleme im Zusammenhang mit einer Serviceintegration oder einem Eingabe- und Ausgabedatenverarbeitungsablauf zu beheben, den Sie möglicherweise definiert haben.

Die folgende Abbildung zeigt einen Test auf einen erfolgreichen Status „Bestanden“. Die Überprüfungsstufe für diesen Zustand ist auf DEBUG gesetzt. Die Registerkarte Eingabe-/Ausgabeverarbeitung in der folgenden Abbildung zeigt das Ergebnis der Anwendung von Parameters auf die für diesen Status bereitgestellte Eingabe.

Ausgabe eines ausgewählten Status, der den Test für die Debug-Ebene erfolgreich ist.

Die folgende Abbildung zeigt einen Test, der für einen Aufgabenstatus fehlgeschlagen ist, wenn die Überprüfungsstufe auf DEBUG gesetzt ist. Die Registerkarte Eingabe-/Ausgabeverarbeitung in der folgenden Abbildung zeigt das Ergebnis der Eingabe- und Ausgabedatenverarbeitung für den Status bis zum Zeitpunkt ihres Fehlers.

Ausgabe eines Zustands, der den Test für die Debug-Ebene nicht bestanden hat.

TRACE-inspectionLevel

Step Functions stellt die TRACE-Ebene bereit, um eine HTTP-Aufgabe zu testen. Diese Stufe gibt Informationen über die HTTP-Anforderung zurück, die Step Functions sendet, und die Antwort, die eine Drittanbieter-API zurückgibt. Die Antwort kann Informationen wie Header und Anforderungstext enthalten. Darüber hinaus können Sie die Statusausgabe und das Ergebnis der Eingabe- und Ausgabedatenverarbeitung auf dieser Ebene anzeigen.

Wenn der Test fehlschlägt, zeigt diese Stufe die Fehlerausgabe an.

Diese Stufe gilt nur für HTTP Task. Step Functions gibt einen Fehler aus, wenn Sie diese Stufe für andere Statustypen verwenden.

Wenn Sie die Überprüfungsstufe auf TRACE setzen, können Sie auch Geheimnisse anzeigen, die in der EventBridge Verbindung enthalten sind. Dazu müssen Sie den revealSecrets Parameter true in der TestState API auf setzen. Darüber hinaus müssen Sie sicherstellen, dass der IAM Benutzer, der die TestState API aufruft, über die Berechtigung für die states:RevealSecrets Aktion verfügt. Ein Beispiel für eine IAM Richtlinie, die die states:RevealSecrets Berechtigung festlegt, finden Sie unter IAM -Berechtigungen für die Verwendung der TestState API. Ohne diese Berechtigung Step Functions löst einen Fehler aufgrund Zugriffsverweigerung aus.

Wenn Sie den revealSecrets Parameter auf setzenfalse, Step Functions lässt alle Secrets in den HTTP-Anforderungs- und Antwortdaten weg.

Die folgende Abbildung zeigt einen Test für eine erfolgreiche HTTP-Aufgabe. Die Überprüfungsstufe für diesen Zustand ist auf TRACE gesetzt. Die Registerkarte HTTP-Anfrage und -Antwort in der folgenden Abbildung zeigt das Ergebnis des API-Aufrufs eines Drittanbieters.

Ausgabe eines ausgewählten Zustands, der den Test für das TRACE-Level erfolgreich ist.

IAM -Berechtigungen für die Verwendung der TestState API

Der IAM Benutzer, der die TestState API aufruft, muss über Berechtigungen zum Ausführen der iam:PassRole Aktionen states:TestState und verfügen. Wenn Sie den Parameter revealSecrets auf setzentrue, müssen Sie außerdem sicherstellen, dass der IAM Benutzer über Berechtigungen zum Ausführen der states:RevealSecrets Aktion verfügt. Ohne diese Berechtigung Step Functions löst einen Fehler aufgrund Zugriffsverweigerung aus.

Sie müssen auch sicherstellen, dass Ihre Ausführungsrolle die erforderlichen IAM Berechtigungen für die Ressourcen enthält, auf die Ihr Status zugreift. Informationen zu den Berechtigungen, die ein Status benötigt, finden Sie unter Verwalten von Ausführungsrollen.

Im folgenden IAM Richtlinienbeispiel werden die states:RevealSecrets Berechtigungen states:TestStateiam:PassRole, und festgelegt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:TestState", "states:RevealSecrets", "iam:PassRole" ], "Resource": "*" } ] }

Testen eines Zustands (Konsole)

Sie können einen Status in der Konsole testen und den Statusausgabe- oder Eingabe- und Ausgabedatenverarbeitungsablauf überprüfen. Für eine HTTP-Aufgabe können Sie die unformatierte HTTP-Anfrage und -Antwort testen.

So testen Sie einen Status
  1. Öffnen Sie die Step-Functions-Konsole .

  2. Wählen Sie Zustandsautomat erstellen, um mit der Erstellung eines Zustandsautomaten zu beginnen, oder wählen Sie einen vorhandenen Zustandsautomaten aus.

  3. Wählen Sie in der Entwurfsmodus von Workflow Studio einen Status aus, den Sie testen möchten.

  4. Wählen Sie Teststatus im Inspector Bereich von Workflow Studio aus.

  5. Gehen Sie im Dialogfeld Teststatus wie folgt vor:

    1. Wählen Sie für Ausführungsrolle eine Ausführungsrolle aus, um den Status zu testen. Stellen Sie sicher, dass Sie über die erforderlichen IAM Berechtigungen für den Status verfügen, den Sie testen möchten.

    2. (Optional) Geben Sie alle JSON-Eingaben an, die Ihr ausgewählter Status für den Test benötigt.

    3. Wählen Sie für Überprüfungsstufe eine der folgenden Optionen basierend auf den Werten aus, die Sie anzeigen möchten:

      • INFO – Zeigt die Statusausgabe auf der Registerkarte Ausgabe an, wenn der Test erfolgreich ist. Wenn der Test fehlschlägt, zeigt INFO die Fehlerausgabe an, die den Fehlernamen und eine detaillierte Erklärung der Ursache für diesen Fehler enthält. Standardmäßig Step Functions legt die Überprüfungsstufe auf INFO fest, wenn Sie keine Stufe auswählen.

      • DEBUG – Zeigt die Zustandsausgabe und das Ergebnis der Eingabe- und Ausgabedatenverarbeitung an, wenn der Test erfolgreich ist. Wenn der Test fehlschlägt, zeigt DEBUG die Fehlerausgabe an, die den Fehlernamen und eine detaillierte Erklärung der Ursache für diesen Fehler enthält.

      • TRACE – Zeigt die unformatierte HTTP-Anforderung und -Antwort an und ist nützlich für die Überprüfung von Headern, Abfrageparametern und anderen API-spezifischen Details. Diese Option ist nur für die HTTP-Aufgabe verfügbar.

        Optional können Sie wählen, ob Sie Geheimnisse anzeigen auswählen möchten. In Kombination mit TRACE können Sie mit dieser Einstellung die sensiblen Daten sehen, die die EventBridge Verbindung einfügt, z. B. API-Schlüssel. Die IAM Benutzeridentität, die Sie für den Zugriff auf die Konsole verwenden, muss über die Berechtigung zum Ausführen der states:RevealSecrets Aktion verfügen. Ohne diese Berechtigung Step Functions gibt einen Fehler aufgrund Zugriffsverweigerung aus, wenn Sie den Test starten. Ein Beispiel für eine -IAMRichtlinie, die die states:RevealSecrets Berechtigung festlegt, finden Sie unter IAM -Berechtigungen für die Verwendung der TestState API.

    4. Wählen Sie Test starten aus.

Testen eines Zustands mit AWS CLI

Sie können einen unterstützten Status mithilfe der TestState API in der testenAWS CLI. Diese API akzeptiert die Definition eines Zustands und führt sie aus.

Für jeden Status können Sie den Detailumfang angeben, den Sie in den Testergebnissen anzeigen möchten. Diese Details enthalten zusätzliche Informationen zur Ausführung des Status, einschließlich des Ergebnisses der Eingabe- und Ausgabedatenverarbeitung sowie HTTP-Anfrage- und Antwortinformationen. Die folgenden Beispiele zeigen die verschiedenen Inspektionsstufen, die Sie für die TestState API angeben können. Denken Sie daran, den kursiv gedruckten Text durch Ihre ressourcenspezifischen Informationen zu ersetzen.

Dieser Abschnitt enthält die folgenden Beispiele, die beschreiben, wie Sie die verschiedenen Inspektionsstufen verwenden können, die in der Step Functions bietetAWS CLI:

Beispiel 1: Verwenden von INFO inspectionLevel zum Testen eines Choice-Status

Um einen Status mit der INFO inspectionLevel in der zu testen AWS CLI, führen Sie den test-state Befehl aus, wie im folgenden Beispiel gezeigt.

aws stepfunctions test-state \ --definition '{"Type": "Choice", "Choices": [{"Variable": "$.number", "NumericEquals": 1, "Next": "Equals 1"}, {"Variable": "$.number", "NumericEquals": 2, "Next": "Equals 2"}], "Default": "No Match"}' \ --role-arn arn:aws:iam::123456789012:role/myRole \ --input '{"number": 2}'

In diesem Beispiel wird ein Choice-Status verwendet, um den Ausführungspfad für den Status basierend auf der von Ihnen angegebenen numerischen Eingabe zu bestimmen. Standardmäßig Step Functions setzt die inspectionLevel auf , INFO wenn Sie keine Ebene festlegen.

Step Functions gibt die folgende Ausgabe zurück.

{ "output": "{\"number\": 2}", "nextState": "Equals 2", "status": "SUCCEEDED" }

Beispiel 2: Verwenden von DEBUG inspectionLevel zum Debuggen der Eingabe- und Ausgabedatenverarbeitung im Status „Bestanden“

Um einen Status mit der DEBUG inspectionLevel in der zu testen AWS CLI, führen Sie den test-state Befehl aus, wie im folgenden Beispiel gezeigt.

aws stepfunctions test-state \ --definition '{"Type": "Pass", "InputPath": "$.payload", "Parameters": {"data": 1}, "ResultPath": "$.result", "OutputPath": "$.result.data", "Next": "Another State"}' \ --role-arn arn:aws:iam::123456789012:role/myRole \ --input '{"payload": {"foo": "bar"}}' \ --inspection-level DEBUG

In diesem Beispiel wird ein -PassZustand verwendet, um zu zeigen, wie Eingabe-JSON-Daten mithilfe der Eingabe- und Ausgabedatenverarbeitungsfilter Step Functions filtert und manipuliert. In diesem Beispiel werden die folgenden Filter verwendet: InputPath, ParameterResultPath, und OutputPath.

Step Functions gibt die folgende Ausgabe zurück.

{ "output": "1", "inspectionData": { "input": "{\"payload\": {\"foo\": \"bar\"}}", "afterInputPath": "{\"foo\":\"bar\"}", "afterParameters": "{\"data\":1}", "afterResultSelector": "{\"data\":1}", "afterResultPath": "{\"payload\":{\"foo\":\"bar\"},\"result\":{\"data\":1}}" }, "nextState": "Another State", "status": "SUCCEEDED" }

Beispiel 3: Verwenden von TRACE inspectionLevel und revealSecrets zur Überprüfung der HTTP-Anfrage, die an eine Drittanbieter-API gesendet wird

Um eine HTTP-Aufgabe mit dem TRACE inspectionLevel zusammen mit dem Parameter revealSecrets in der zu testen AWS CLI, führen Sie den test-state Befehl aus, wie im folgenden Beispiel gezeigt.

aws stepfunctions test-state \ --definition '{"Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": {"Method": "GET", "Authentication": {"ConnectionArn": "arn:aws:events:us-east-1:123456789012:connection/MyConnection/0000000-0000-0000-0000-000000000000"}, "ApiEndpoint": "https://httpbin.org/get", "Headers": {"definitionHeader": "h1"}, "RequestBody": {"message": "Hello from Step Functions!"}, "QueryParameters": {"queryParam": "q1"}}, "End": true}' \ --role-arn arn:aws:iam::123456789012:role/myRole \ --inspection-level TRACE \ --reveal-secrets

In diesem Beispiel wird getestet, ob die HTTP-Aufgabe die angegebene Drittanbieter-API aufrufthttps://httpbin.org/. Außerdem werden die HTTP-Anforderungs- und Antwortdaten für den API-Aufruf angezeigt.

{ "output": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}", "inspectionData": { "input": "{}", "afterInputPath": "{}", "afterParameters": "{\"Method\":\"GET\",\"Authentication\":{\"ConnectionArn\":\"arn:aws:events:us-east-1:123456789012:connection/foo/a59c10f0-a315-4c1f-be6a-559b9a0c6250\"},\"ApiEndpoint\":\"https://httpbin.org/get\",\"Headers\":{\"definitionHeader\":\"h1\"},\"RequestBody\":{\"message\":\"Hello from Step Functions!\"},\"QueryParameters\":{\"queryParam\":\"q1\"}}", "result": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}", "afterResultSelector": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}", "afterResultPath": "{\"Headers\":{\"date\":[\"Tue, 21 Nov 2023 00:06:17 GMT\"],\"access-control-allow-origin\":[\"*\"],\"content-length\":[\"620\"],\"server\":[\"gunicorn/19.9.0\"],\"access-control-allow-credentials\":[\"true\"],\"content-type\":[\"application/json\"]},\"ResponseBody\":{\"args\":{\"QueryParam1\":\"QueryParamValue1\",\"queryParam\":\"q1\"},\"headers\":{\"Authorization\":\"Basic XXXXXXXX\",\"Content-Type\":\"application/json; charset=UTF-8\",\"Customheader1\":\"CustomHeaderValue1\",\"Definitionheader\":\"h1\",\"Host\":\"httpbin.org\",\"Range\":\"bytes=0-262144\",\"Transfer-Encoding\":\"chunked\",\"User-Agent\":\"Amazon|StepFunctions|HttpInvoke|us-east-1\",\"X-Amzn-Trace-Id\":\"Root=1-0000000-0000-0000-0000-000000000000\"},\"origin\":\"12.34.567.891\",\"url\":\"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"},\"StatusCode\":200,\"StatusText\":\"OK\"}", "request": { "protocol": "https", "method": "GET", "url": "https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1", "headers": "[definitionHeader: h1, Authorization: Basic XXXXXXXX, CustomHeader1: CustomHeaderValue1, User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1, Range: bytes=0-262144]", "body": "{\"message\":\"Hello from Step Functions!\",\"BodyKey1\":\"BodyValue1\"}" }, "response": { "protocol": "https", "statusCode": "200", "statusMessage": "OK", "headers": "[date: Tue, 21 Nov 2023 00:06:17 GMT, content-type: application/json, content-length: 620, server: gunicorn/19.9.0, access-control-allow-origin: *, access-control-allow-credentials: true]", "body": "{\n \"args\": {\n \"QueryParam1\": \"QueryParamValue1\", \n \"queryParam\": \"q1\"\n }, \n \"headers\": {\n \"Authorization\": \"Basic XXXXXXXX\", \n \"Content-Type\": \"application/json; charset=UTF-8\", \n \"Customheader1\": \"CustomHeaderValue1\", \n \"Definitionheader\": \"h1\", \n \"Host\": \"httpbin.org\", \n \"Range\": \"bytes=0-262144\", \n \"Transfer-Encoding\": \"chunked\", \n \"User-Agent\": \"Amazon|StepFunctions|HttpInvoke|us-east-1\", \n \"X-Amzn-Trace-Id\": \"Root=1-0000000-0000-0000-0000-000000000000\"\n }, \n \"origin\": \"12.34.567.891\", \n \"url\": \"https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1\"\n}\n" } }, "status": "SUCCEEDED" }

Beispiel 4: Verwenden des jq-Hilfsprogramms zum Filtern und Drucken der Antwort, die die TestState API zurückgibt

Die TestState API gibt JSON-Daten als Escape-Zeichenfolgen in ihrer Antwort zurück. Das folgende AWS CLI Beispiel erweitert Beispiel 3 und verwendet das jq Dienstprogramm , um die HTTP-Antwort, die die TestState API zurückgibt, in einem für Menschen lesbaren Format zu filtern und zu drucken. Informationen zu jq und dessen Installationsanweisungen finden Sie unter jq auf GitHub.

aws stepfunctions test-state \ --definition '{"Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": {"Method": "GET", "Authentication": {"ConnectionArn": "arn:aws:events:us-east-1:123456789012:connection/MyConnection/0000000-0000-0000-0000-000000000000"}, "ApiEndpoint": "https://httpbin.org/get", "Headers": {"definitionHeader": "h1"}, "RequestBody": {"message": "Hello from Step Functions!"}, "QueryParameters": {"queryParam": "q1"}}, "End": true}' \ --role-arn arn:aws:iam::123456789012:role/myRole \ --inspection-level TRACE \ --reveal-secrets \ | jq '.inspectionData.response.body | fromjson'

Das folgende Beispiel zeigt die Ausgabe in einem für Menschen lesbaren Format.

{ "args": { "QueryParam1": "QueryParamValue1", "queryParam": "q1" }, "headers": { "Authorization": "Basic XXXXXXXX", "Content-Type": "application/json; charset=UTF-8", "Customheader1": "CustomHeaderValue1", "Definitionheader": "h1", "Host": "httpbin.org", "Range": "bytes=0-262144", "Transfer-Encoding": "chunked", "User-Agent": "Amazon|StepFunctions|HttpInvoke|us-east-1", "X-Amzn-Trace-Id": "Root=1-0000000-0000-0000-0000-000000000000" }, "origin": "12.34.567.891", "url": "https://httpbin.org/get?queryParam=q1&QueryParam1=QueryParamValue1" }

Testen und Debuggen des Eingabe- und Ausgabedatenflusses

Die TestState API ist hilfreich, um die Daten zu testen und zu debuggen, die durch Ihren Workflow fließen. Dieser Abschnitt enthält einige wichtige Konzepte und erklärt, wie Sie die TestState für diesen Zweck verwenden.

Die wichtigsten Konzepte

In wird Step Functionsder Prozess des Filterns und Bearbeitens von JSON-Daten während des Durchlaufens der Zustände in Ihrem Zustandsautomaten als Eingabe- und Ausgabeverarbeitung bezeichnet. Weitere Information zur Funktionsweise finden Sie unter Eingabe- und Ausgabeverarbeitung in Step Functions.

Alle Zustandstypen in (Amazon States LanguageASL) (Aufgabe, Parallel, Zuordnung, Pass, Warten, Auswahl, Erfolgreich und Fehlgeschlagen) teilen sich eine Reihe gemeinsamer Felder zum Filtern und Bearbeiten der JSON-Daten, die sie durchlaufen. Diese Felder sind: InputPath, Parameter, ResultSelectorResultPath, und OutputPath. Die Unterstützung für jedes Feld variiert je nach Status . Zur Laufzeit Step Functions wendet jedes Feld in einer bestimmten Reihenfolge an. Das folgende Diagramm zeigt die Reihenfolge, in der diese Felder auf die Daten innerhalb eines Aufgabenstatus angewendet werden:

Die Reihenfolge, in der die Eingabe- und Ausgabedatenverarbeitungsfilter Step Functions anwendet: InputPath, Parameter ResultSelector ResultPath und OutputPath auf einen -Zustand.

In der folgenden Liste wird die Reihenfolge der Anwendung der im Diagramm gezeigten Eingabe- und Ausgabeverarbeitungsfelder beschrieben.

  1. Die Zustandseingabe ist die JSON-Daten, die aus einem früheren Zustand an den aktuellen Zustand übergeben wurden.

  2. InputPath filtert einen Teil der Rohstatuseingabe.

  3. Parameter konfiguriert den Satz von Werten, die an die Aufgabe übergeben werden sollen.

  4. Die Aufgabe führt Arbeit aus und gibt ein Ergebnis zurück.

  5. ResultSelector wählt einen Satz von Werten aus, die aus dem Aufgabenergebnis beibehalten werden sollen.

  6. ResultPath kombiniert das Ergebnis mit der Rohstatuseingabe oder ersetzt das Ergebnis durch es.

  7. OutputPath filtert einen Teil der Ausgabe, der an den nächsten Status übergeben werden soll.

  8. Die Zustandsausgabe ist die JSON-Daten, die vom aktuellen Status an den nächsten Status übergeben werden.

Diese Eingabe- und Ausgabeverarbeitungsfelder sind optional. Wenn Sie keines dieser Felder in Ihrer Statusdefinition verwenden, verbraucht die Aufgabe die Rohstatuseingabe und gibt das Aufgabenergebnis als Statusausgabe zurück.

Verwenden von TestState zur Überprüfung der Eingabe- und Ausgabeverarbeitung

Wenn Sie die TestState API aufrufen und den inspectionLevel Parameter auf setzenDEBUG, enthält die API-Antwort ein Objekt namens inspectionData. Dieses Objekt enthält Felder, mit denen Sie überprüfen können, wie Daten beim Ausführen innerhalb des -Status gefiltert oder manipuliert wurden. Das folgende Beispiel zeigt das -inspectionDataObjekt für einen Aufgabenstatus.

"inspectionData": { "input": string, "afterInputPath": string, "afterParameters": string, "result": string, "afterResultSelector": string, "afterResultPath": string, "output": string }

In diesem Beispiel zeigt jedes Feld, das das after Präfix enthält, die Daten an, nachdem ein bestimmtes Feld angewendet wurde. Beispielsweise afterInputPath zeigt die Auswirkung der Anwendung des InputPath Felds zum Filtern der Rohstatuseingabe. Das folgende Diagramm ordnet jedes ASL-Definitionsfeld dem entsprechenden Feld im -inspectionDataObjekt zu:

Die Zuordnung der inspectionData Objektfelder zu ASL-Feldern.

Beispiele für die Verwendung der TestState -API zum Debuggen der Eingabe- und Ausgabeverarbeitung finden Sie im Folgenden: