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 TestState API, um einen Zustand in Step Functions zu testen
Der TestStateAPIakzeptiert die Definition eines einzelnen Zustands und führt ihn aus. Sie können einen Status testen, ohne eine Zustandsmaschine zu erstellen oder eine vorhandene Zustandsmaschine zu aktualisieren.
Mit TestState API dem können Sie Folgendes testen:
-
Der Datenfluss für die Eingabe- und Ausgabeverarbeitung eines Staates.
-
Eine AWS-Service Integration mit anderen AWS-Services Anfragen und Antworten
-
Eine HTTPAufgabenanfrage und Antwort
Um einen Status zu testen, können Sie auch den Step Functions Konsole, AWS Command Line Interface (AWS CLI), oder derSDK.
Der TestState
API nimmt eine IAM Rolle an, die das Erforderliche enthalten muss IAM Berechtigungen für die Ressourcen, auf die Ihr Staat zugreift. Informationen zu den Berechtigungen, die ein Bundesstaat möglicherweise benötigt, finden Sie unterIAM Berechtigungen für die Verwendung TestState API.
Themen
Überlegungen zur Verwendung von TestState API
Mit TestStateAPIdem können Sie jeweils nur einen Status testen. Zu den Staaten, die Sie testen können, gehören die folgenden:
Beachten Sie bei der TestState
API Verwendung von die folgenden Überlegungen.
-
Folgendes wird TestState API nicht unterstützt:
-
Workflow-Status der AufgabeStaaten, die die folgenden Ressourcentypen verwenden:
-
Muster der Serviceintegration vom Typ
.sync
oder.waitForTaskToken
-
Status des parallelen WorkflowsBundesstaat
-
Workflow-Status zuordnenBundesstaat
-
-
Ein Test kann bis zu fünf Minuten dauern. Wenn ein Test diese Dauer überschreitet, schlägt er mit dem
States.Timeout
Fehler fehl.
Verwenden von Inspektionsstufen in TestState API
Um einen Zustand mit dem zu testen TestStateAPI, geben Sie die Definition dieses Zustands an. Der Test gibt dann eine Ausgabe zurück. Für jeden Status können Sie angeben, wie viele Details Sie in den Testergebnissen anzeigen möchten. Diese Details enthalten zusätzliche Informationen über den Bundesstaat, den Sie testen. Wenn Sie beispielsweise Filter für die Eingabe- und Ausgabedatenverarbeitung verwendet haben, wie z. B. InputPathoder ResultPathin einem Bundesstaat, können Sie die Zwischen- und Enddaten der Datenverarbeitung einsehen.
Step Functions bietet die folgenden Ebenen, um die Details anzugeben, die Sie anzeigen möchten:
Bei all diesen Ebenen werden auch die nextState
Felder status
und zurückgegeben. status
gibt den Status der Ausführung im Status an. Zum BeispielSUCCEEDED
, FAILED
RETRIABLE
, undCAUGHT_ERROR
. nextState
gibt den Namen des nächsten Zustands an, zu dem der Übergang erfolgen soll. Wenn Sie in Ihrer Definition keinen nächsten Status definiert haben, gibt dieses Feld einen leeren Wert zurück.
Informationen zum Testen eines Bundesstaates anhand dieser Inspektionsstufen finden Sie in Step Functions Konsole und AWS CLI, siehe Testen eines Zustands (Konsole) undTesten 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 Inspektionsstufe auf fest, INFOwenn Sie keine Stufe angeben.
Die folgende Abbildung zeigt einen Test für den Status „Bestanden“, der erfolgreich ist. Die Inspektionsstufe für diesen Status ist auf eingestellt, INFOund die Ausgabe für den Status wird auf der Registerkarte Ausgabe angezeigt.
Die folgende Abbildung zeigt einen Test, der für einen Task-Status fehlgeschlagen ist, wenn die Inspektionsstufe auf eingestellt ist INFO. Auf der Registerkarte Ausgabe wird die Fehlerausgabe angezeigt, die den Fehlernamen und eine ausführliche Erklärung der Fehlerursache enthält.
DEBUG inspectionLevel
Wenn der Test erfolgreich ist, werden auf dieser Ebene die Statusausgabe und das Ergebnis der Eingabe- und Ausgabedatenverarbeitung angezeigt.
Schlägt der Test fehl, zeigt diese Stufe die Fehlerausgabe an. Auf dieser Ebene werden die Zwischenergebnisse der Datenverarbeitung bis zum Zeitpunkt des Fehlers angezeigt. Nehmen wir zum Beispiel an, Sie haben einen Task-Status getestet, der einen aufruft Lambda Funktion. Stellen Sie sich vor, Sie hätten die Filtern der Statusausgabe mithilfe von Workflows OutputPath in Step Functions Filter InputPathParameter,Zustandsausgabe mithilfe von Workflows ResultPath in Step Functions angeben, und auf den Status Task angewendet. Angenommen, der Aufruf ist fehlgeschlagen. In diesem Fall zeigt die DEBUG
Ebene die Datenverarbeitungsergebnisse, die auf der Anwendung der Filter basieren, in der folgenden Reihenfolge an:
-
input
— Eingabe im Rohzustand -
afterInputPath
— Eingabe danach Step Functions wendet denInputPath
Filter an. -
afterParameters
— Die effektive Eingabe danach Step Functions wendet denParameters
Filter an.
Die auf dieser Ebene verfügbaren Diagnoseinformationen können Ihnen bei der Behebung von Problemen im Zusammenhang mit einer Serviceintegration oder einem von Ihnen definierten Ablauf der Eingabe- und Ausgabedatenverarbeitung helfen.
Die folgende Abbildung zeigt einen Test für den Status „Bestanden“, der erfolgreich ist. Die Inspektionsstufe für diesen Status ist auf DEBUGeingestellt. Die Registerkarte Eingabe-/Ausgabeverarbeitung in der folgenden Abbildung zeigt das Ergebnis der Anwendung von Parametersauf die Eingabe, die für diesen Status bereitgestellt wurde.
Die folgende Abbildung zeigt einen Test, der für einen Task-Status fehlgeschlagen ist, wenn die Inspektionsstufe auf eingestellt ist DEBUG. Die Registerkarte Eingabe-/Ausgabeverarbeitung in der folgenden Abbildung zeigt das Ergebnis der Eingabe- und Ausgabedatenverarbeitung für den Status bis zum Zeitpunkt des Fehlers.
TRACE inspectionLevel
Step Functions gibt die TRACEEbene an, auf der eine HTTPAufgabe getestet werden kann. Diese Ebene gibt Informationen über die HTTP Anfrage zurück, die Step Functions stellt und beantwortet, die von einem Drittanbieter API zurückgegeben wird. Die Antwort kann Informationen wie Header und Anfragetext enthalten. Darüber hinaus können Sie den Status, die Ausgabe 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 Ebene für andere Statustypen verwenden.
Wenn Sie die Inspektionsebene auf einstellen TRACE, können Sie auch die in der EventBridge Verbindung enthaltenen Geheimnisse einsehen. Dazu müssen Sie den revealSecrets
Parameter true
in der auf setzen TestStateAPI. Darüber hinaus müssen Sie sicherstellen, dass IAM Der Benutzer, der den aufruft, TestState API hat die Erlaubnis für die states:RevealSecrets
Aktion. Für ein Beispiel für IAM Eine Richtlinie, die die states:RevealSecrets
Berechtigung festlegt, finden Sie unterIAM Berechtigungen für die Verwendung TestState API. Ohne diese Genehmigung Step Functions gibt den Fehler „Zugriff verweigert“ aus.
Wenn Sie den revealSecrets
Parameter auf setzen, false
Step Functions lässt alle Geheimnisse in den HTTP Anforderungs- und Antwortdaten aus.
Die folgende Abbildung zeigt einen Test für eine HTTP Aufgabe, der erfolgreich war. Die Inspektionsstufe für diesen Status ist auf TRACEeingestellt. Die Registerkarte „HTTPAnfrage und Antwort“ in der folgenden Abbildung zeigt das Ergebnis des API Anrufs eines Drittanbieters.
IAM Berechtigungen für die Verwendung TestState API
Das Tool IAM Der Benutzer, der das aufruft, TestState
API muss über die erforderlichen Berechtigungen verfügen, um die states:TestState
iam:PassRole
AND-Aktionen auszuführen. Wenn Sie den revealSecretsParameter auf setzentrue
, müssen Sie außerdem sicherstellen, dass IAM Der Benutzer ist berechtigt, die states:RevealSecrets
Aktion auszuführen. Ohne diese Erlaubnis Step Functions gibt den Fehler „Zugriff verweigert“ aus.
Sie müssen außerdem sicherstellen, dass Ihre Ausführungsrolle die erforderlichen Informationen enthält IAM Berechtigungen für die Ressourcen, auf die Ihr Bundesstaat zugreift. Informationen zu den Berechtigungen, die ein Bundesstaat möglicherweise benötigt, finden Sie unter Ausführungsrollen verwalten.
Folgendes IAM Das Richtlinienbeispiel legt die states:RevealSecrets
Berechtigungen states:TestState
iam:PassRole
, und fest.
{ "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 die Statusausgabe oder den Ablauf der Eingabe- und Ausgabedatenverarbeitung überprüfen. Bei einer HTTPAufgabe können Sie die HTTP Rohanforderung und -antwort testen.
Um einen Status zu testen
-
Öffnen Sie die Step Functions Functions-Konsole
. -
Wählen Sie Create State Machine, um mit der Erstellung eines State Machine zu beginnen, oder wählen Sie einen vorhandenen State Machine aus.
-
Wählen Sie im Entwurfsmodus Workflow Studio einen Status aus, den Sie testen möchten.
-
Wählen Sie im Inspektor-Panel Bedienfeld von Workflow Studio die Option Teststatus aus.
-
Gehen Sie im Dialogfeld Teststatus wie folgt vor:
-
Wählen Sie unter Ausführungsrolle eine Ausführungsrolle aus, um den Status zu testen. Stellen Sie sicher, dass Sie über die erforderlichen IAM Berechtigungen für den Staat, den Sie testen möchten.
-
(Optional) Geben Sie alle JSON Eingaben ein, die Ihr ausgewählter Bundesstaat für den Test benötigt.
-
Wählen Sie für Inspektionsstufe je nach den Werten, die Sie anzeigen möchten, eine der folgenden Optionen aus:
-
INFO— Zeigt die Statusausgabe auf der Registerkarte Ausgabe an, wenn der Test erfolgreich ist. Wenn der Test fehlschlägt, INFOwird die Fehlerausgabe angezeigt, die den Fehlernamen und eine detaillierte Erklärung der Fehlerursache enthält. Standardmäßig Step Functions legt die Inspektionsstufe auf fest, INFOwenn Sie keine Stufe auswählen.
-
DEBUG— Zeigt die Statusausgabe und das Ergebnis der Eingabe- und Ausgabedatenverarbeitung an, wenn der Test erfolgreich ist. Wenn der Test fehlschlägt, DEBUGwird die Fehlerausgabe angezeigt, die den Fehlernamen und eine detaillierte Erklärung der Fehlerursache enthält.
-
TRACE— Zeigt die HTTP unformatierte Anfrage 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 Aufgabe verfügbar. HTTP
Optional können Sie „Geheimnisse enthüllen“ auswählen. In Kombination mit TRACEkönnen Sie mit dieser Einstellung die vertraulichen Daten sehen, die EventBridge Verbindungseinfügungen, z. B. API Schlüssel. Das Tool IAM Die Benutzeridentität, die Sie für den Zugriff auf die Konsole verwenden, muss über die erforderliche Berechtigung zum Ausführen der
states:RevealSecrets
Aktion verfügen. Ohne diese Erlaubnis Step Functions gibt den Fehler „Zugriff verweigert“ aus, wenn Sie den Test starten. Für ein Beispiel für ein IAM Eine Richtlinie, die diestates:RevealSecrets
Berechtigung festlegt, finden Sie unterIAM Berechtigungen für die Verwendung TestState API.
-
-
Wählen Sie Test starten.
-
Testen eines Zustands mit AWS CLI
Sie können einen unterstützten Status testen, indem Sie den TestStateAPIin der AWS CLI. Dies API akzeptiert die Definition eines Zustands und führt sie aus.
Für jeden Status können Sie angeben, wie viele Details Sie in den Testergebnissen anzeigen möchten. Diese Details enthalten zusätzliche Informationen über die Ausführung des Status, einschließlich der Ergebnisse der Eingabe- und Ausgabedatenverarbeitung sowie der HTTP Anfrage- und Antwortinformationen. In den folgenden Beispielen werden die verschiedenen Inspektionsstufen veranschaulicht, die Sie für die angeben können TestState API. Denken Sie daran, das zu ersetzen italicized
Text mit Ihren ressourcenspezifischen Informationen.
Dieser Abschnitt enthält die folgenden Beispiele, in denen beschrieben wird, wie Sie die verschiedenen Inspektionsebenen verwenden können Step Functions bietet in der AWS CLI:
Beispiel 1: Wird verwendet INFO inspectionLevel , um einen Choice-Status zu testen
Um einen Status mit dem INFO
inspectionLevelin 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 der Status Choice verwendet, um den Ausführungspfad für den Status anhand der von Ihnen angegebenen numerischen Eingabe zu bestimmen. Standardmäßig Step Functions setzt den Wert inspectionLevel
auf, INFO
wenn Sie keine Stufe festlegen.
Step Functions gibt die folgende Ausgabe zurück.
{
"output": "{\"number\": 2}",
"nextState": "Equals 2",
"status": "SUCCEEDED"
}
Beispiel 2: Wird verwendet DEBUG inspectionLevel , um die Eingabe- und Ausgabedatenverarbeitung im Status Pass zu debuggen
Um einen Status mit dem DEBUG
inspectionLevelin zu testen AWS CLI, führen Sie den test-state
Befehl wie im folgenden Beispiel gezeigt aus.
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 anhand eines Workflow-Status übergeben Zustands veranschaulicht, wie Step Functions filtert und manipuliert JSON Eingabedaten mithilfe der Eingabe- und Ausgabedatenverarbeitungsfilter. In diesem Beispiel werden die folgenden Filter verwendet:InputPath
, Parameter
Zustandsausgabe mithilfe von Workflows ResultPath in Step Functions angeben
, und. Filtern der Statusausgabe mithilfe von Workflows OutputPath in Step Functions
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: Verwendung von TRACE inspectionLevel und revealSecrets zur Überprüfung der an einen Drittanbieter gesendeten HTTP Anfrage API
Um eine HTTPAufgabe mit dem TRACE
inspectionLevelzusammen mit dem revealSecretsParameter in 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 der HTTP Task den angegebenen Drittanbieter aufruftAPI,https://httpbin.org/
. Außerdem werden die HTTP Anforderungs- und Antwortdaten für den API Anruf 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-Dienstprogramms zum Filtern und Drucken der Antwort, TestState API die zurückgesendet wird
Das TestState API gibt in seiner Antwort JSON Daten als Escape-Zeichenketten zurück. Folgendes AWS CLI Beispiel erweitert Beispiel 3 und verwendet das jq
Hilfsprogramm, um die TestState API zurückgegebene HTTP Antwort in einem für Menschen lesbaren Format zu filtern und auszudrucken. Weitere Informationen jq
und Installationsanweisungen finden Sie unter jq
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, die in einem für Menschen lesbaren Format zurückgegeben wird.
{
"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
Das TestState
API ist hilfreich beim Testen und Debuggen der Daten, die durch Ihren Workflow fließen. Dieser Abschnitt enthält einige wichtige Konzepte und erklärt, wie Sie den TestState für diesen Zweck verwenden können.
Die wichtigsten Konzepte
In Step Functions, der Prozess des Filterns und Manipulierens von JSON Daten, während sie die Zustände in Ihrer Zustandsmaschine durchlaufen, wird Eingabe- und Ausgabeverarbeitung genannt. Weitere Information zur Funktionsweise finden Sie unter Eingabe und Ausgabe in Step Functions verarbeiten.
Alle Zustandstypen in Amazon States Language (ASL) (Task, Parallel, Map, Pass, Wait, Choice, Succeed und Fail) haben gemeinsame Felder zum Filtern und Bearbeiten der JSON Daten, die sie durchlaufen, gemeinsam. Diese Felder sind:InputPath,Parameter, ResultSelectorZustandsausgabe mithilfe von Workflows ResultPath in Step Functions angeben, undFiltern der Statusausgabe mithilfe von Workflows OutputPath in Step Functions. Die Support für jedes Feld ist von Bundesstaat zu Bundesstaat unterschiedlich
In der folgenden Liste wird die Reihenfolge beschrieben, in der die Eingabe- und Ausgabeverarbeitungsfelder im Diagramm angewendet werden.
-
Bei der Statuseingabe handelt es sich um die JSON Daten, die von einem früheren Status an den aktuellen Status übergeben wurden.
-
InputPathfiltert einen Teil der Rohzustandseingabe.
-
Parameterkonfiguriert den Wertesatz, der an die Aufgabe übergeben werden soll.
-
Die Aufgabe führt Arbeit aus und gibt ein Ergebnis zurück.
-
ResultSelectorwählt eine Reihe von Werten aus, die aus dem Aufgabenergebnis übernommen werden sollen.
-
Zustandsausgabe mithilfe von Workflows ResultPath in Step Functions angebenkombiniert das Ergebnis mit der unverarbeiteten Statuseingabe oder ersetzt das Ergebnis damit.
-
Filtern der Statusausgabe mithilfe von Workflows OutputPath in Step Functionsfiltert einen Teil der Ausgabe, sodass er in den nächsten Zustand übergeht.
-
Bei der Statusausgabe handelt es sich um 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 Bundesstaatendefinition verwenden, verwendet die Aufgabe die unverarbeitete Statuseingabe und gibt das Aufgabenergebnis als Statusausgabe zurück.
Wird verwendet TestState , um die Eingabe- und Ausgabeverarbeitung zu überprüfen
Wenn Sie den aufrufen TestState
API und den inspectionLevel
Parameter auf setzenDEBUG
, enthält die API Antwort ein aufgerufenes ObjektinspectionData
. Dieses Objekt enthält Felder, anhand derer Sie überprüfen können, wie Daten innerhalb des Status gefiltert oder manipuliert wurden, als sie ausgeführt wurden. Das folgende Beispiel zeigt das inspectionData
Objekt für einen Task-Status.
"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. afterInputPath
Zeigt beispielsweise, wie sich das Anwenden des InputPath
Felds auf das Filtern der Rohstatuseingabe auswirkt. Das folgende Diagramm ordnet jedes ASLDefinitionsfeld dem entsprechenden Feld im inspectionData
Objekt zu:
Beispiele für die Verwendung von TestState API zum Debuggen der Eingabe- und Ausgabeverarbeitung finden Sie im Folgenden: