Muster der Serviceintegration - 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.

Muster der Serviceintegration

AWS Step Functions lässt sich direkt in Dienste in der Sprache der Amazon-Staaten integrieren. Sie können diese AWS -Services mithilfe dreier verschiedener Serviceintegrationsmuster verwalten:

  • Rufen Sie einen Dienst auf und lassen Sie Step Functions sofort nach Erhalt einer HTTP-Antwort zum nächsten Status übergehen.

  • Rufen Sie einen Service auf und lassen Sie Step Functions warten, bis ein Job abgeschlossen ist.

  • Rufen Sie einen Dienst mit einem Task-Token auf und lassen Sie Step Functions warten, bis dieses Token mit einer Nutzlast zurückgegeben wird.

Jedes dieser Serviceintegrationsmuster wird dadurch gesteuert, wie Sie im "Resource"-Feld Ihrer Aufgabendefinition eine URI erstellen.

Hinweise zur Konfiguration AWS Identity and Access Management (IAM) für integrierte Dienste finden Sie unter. IAM-Richtlinien für integrierte Dienste

Request Response (Antwort anfordern)

Wenn Sie in der "Resource" Zeichenfolge Ihres Aufgabenstatus einen Dienst angeben und nur die Ressource angeben, wartet Step Functions auf eine HTTP-Antwort und geht dann zum nächsten Status über. Step Functions wartet nicht darauf, dass ein Job abgeschlossen ist.

Das folgende Beispiel zeigt, wie Sie ein Amazon SNS SNS-Thema veröffentlichen können.

"Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":"Hello from Step Functions!" }, "Next":"NEXT_STATE" }

Dieses Beispiel verweist auf die Publish-API von Amazon SNS. Der Workflow fährt nach dem Aufruf der Publish-API mit dem nächsten Zustand fort.

Tipp

Informationen zur Implementierung eines Beispiel-Workflows, der das Request Response Service-Integrationsmuster für Ihren verwendet AWS-Konto, finden Sie unter Modul 2 — Request Response of The AWS Step Functions Workshop.

Ausführen einer Aufgabe (.sync)

Bei integrierten Services wie AWS Batch Amazon ECS kann Step Functions warten, bis eine Anfrage abgeschlossen ist, bevor sie zum nächsten Status übergehen. Damit Step Functions warten kann, geben Sie das "Resource" Feld in Ihrer Aufgabenstatusdefinition mit dem .sync Suffix an, das hinter dem Ressourcen-URI angehängt wird.

Wenn Sie beispielsweise einen AWS Batch Job einreichen, verwenden Sie das "Resource" Feld in der State-Machine-Definition, wie in diesem Beispiel gezeigt.

"Manage Batch task": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition", "JobName": "testJob", "JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue" }, "Next": "NEXT_STATE" }

Wenn der .sync Teil an die Ressource Amazon Resource Name (ARN) angehängt ist, bedeutet dies, dass Step Functions auf den Abschluss des Jobs wartet. Nach dem Aufrufen von AWS Batch submitJob wird der Workflow unterbrochen. Wenn der Job abgeschlossen ist, wechselt Step Functions zum nächsten Status. Weitere Informationen finden Sie im AWS Batch Beispielprojekt:Einen Batch-Job verwalten (AWS Batch,Amazon SNS).

Wenn eine Aufgabe, die dieses Dienstintegrationsmuster (.sync) verwendet, abgebrochen wird und Step Functions die Aufgabe nicht stornieren kann, fallen möglicherweise zusätzliche Gebühren für den integrierten Service an. Eine Aufgabe kann abgebrochen werden, wenn:

  • Die Ausführung der Zustandsmaschine ist gestoppt.

  • Ein anderer Zweig eines Parallel-Zustands schlägt mit einem nicht abgefangenen Fehler fehl.

  • Eine Iteration eines Map-Status schlägt mit einem nicht erfassten Fehler fehl.

Step Functions versucht nach besten Kräften, die Aufgabe abzubrechen. Wenn beispielsweise eine Step Functions states:startExecution.sync Functions-Aufgabe abgebrochen wird, ruft sie die Step Functions StopExecution Functions-API-Aktion auf. Es ist jedoch möglich, dass Step Functions die Aufgabe nicht abbrechen kann. Zu den Gründen hierfür gehören, sind aber nicht beschränkt auf:

  • Ihrer IAM-Ausführungsrolle fehlt die Berechtigung, den entsprechenden API-Aufruf durchzuführen.

  • Ein vorübergehender Serviceausfall ist aufgetreten.

Wenn Sie das .sync Dienstintegrationsmuster verwenden, verwendet Step Functions Polling, das Ihre zugewiesenen Kontingente und Ereignisse nutzt, um den Status eines Jobs zu überwachen. Für .sync Aufrufe innerhalb desselben Kontos verwendet Step Functions EventBridge Ereignisse und fragt die APIs ab, die Sie im Status angeben. Task Für kontoübergreifende .sync Aufrufe verwendet Step Functions nur Polling. Beispielsweise führt Step Functions Abfragen auf der DescribeExecutionAPI durch und verwendet Ihr zugewiesenes Kontingent. states:StartExecution.sync

Tipp

Informationen zur Bereitstellung eines Beispielworkflows, der das Service-Integrationsmuster Run a Job (.sync) für Ihren verwendet AWS-Konto, finden Sie unter Modul 3 — Run a Job (.sync) von The AWS Step Functions Workshop.

Für eine Liste der integrierten Services, die das Warten auf den Abschluss eines Auftrags unterstützen (.sync) vgl. Optimierte Integrationen für Step Functions. .

Anmerkung

Für Serviceintegrationen, die das .sync Muster verwenden, sind zusätzliche IAM-Berechtigungen erforderlich. Weitere Informationen finden Sie unter IAM-Richtlinien für integrierte Dienste.

In einigen Fällen möchten Sie vielleicht, dass Step Functions Ihren Arbeitsablauf fortsetzt, bevor der Job vollständig abgeschlossen ist. Sie können dies auf die gleiche Weise erreichen wie bei der Verwendung des Warten auf einen Callback mit dem Aufgabentoken Service Integration Patterns. Übergeben Sie dazu ein Aufgabentoken an Ihren Job und geben Sie es dann mithilfe eines SendTaskSuccessoder SendTaskFailureAPI-Aufrufs zurück. Step Functions verwendet die Daten, die Sie in diesem Aufruf angegeben haben, um die Aufgabe abzuschließen, die Überwachung des Jobs zu beenden und den Workflow fortzusetzen.

Warten auf einen Callback mit dem Aufgabentoken

Callback-Aufgaben bieten eine Möglichkeit, einen Workflow anhalten, bis ein Aufgabentoken zurückgegeben wird. Eine Aufgabe auf eine menschliche Genehmigung warten, mit einer Drittpartei integriert werden oder ältere Systeme aufrufen müssen. Für Aufgaben wie diese können Sie Step Functions anhalten, bis die Workflow-Ausführung das Servicekontingent von einem Jahr erreicht hat (siehe,Kontingente im Zusammenhang mit staatlicher Drosselung), und warten, bis ein externer Prozess oder Workflow abgeschlossen ist. In diesen Situationen können Sie mit Step Functions ein Task-Token an die AWS SDK-Dienstintegrationen und auch an einige optimierte Dienstintegrationen übergeben. Die Aufgabe wird angehalten, bis sie dieses Aufgabentoken mit einem SendTaskSuccess- oder SendTaskFailure- Aufruf zurückerhält.

Wenn bei einem Task Status, der das Callback-Task-Token verwendet, eine Zeitüberschreitung eintritt, wird ein neues zufälliges Token generiert. Sie können vom Kontextobjekt aus auf die Task-Token zugreifen.

Anmerkung

Ein Task-Token muss mindestens ein Zeichen enthalten und darf 1024 Zeichen nicht überschreiten.

Für die Verwendung .waitForTaskToken mit einer AWS SDK-Integration muss die von Ihnen verwendete API über ein Parameterfeld verfügen, in dem das Task-Token platziert werden kann.

Anmerkung

Sie müssen Aufgabentokens von Prinzipalen innerhalb desselben AWS Kontos übergeben. Die Token funktionieren nicht, wenn Sie sie von Schulleitern mit einem anderen AWS Konto senden.

Tipp

Informationen zur Bereitstellung eines Beispielworkflows, der ein Integrationsmuster für den Callback-Task-Token-Service für Ihren verwendet AWS-Konto, finden Sie unter Modul 4 — Warten Sie auf einen Rückruf mit dem Task-Token von The Workshop. AWS Step Functions

Eine Liste der integrierten Services, die das Warten auf ein Aufgabentoken unterstützen (.waitForTaskToken) finden Sie unter Optimierte Integrationen für Step Functions.

Aufgabentoken-Beispiel

In diesem Beispiel muss ein Step Functions Functions-Workflow in einen externen Microservice integriert werden, um eine Bonitätsprüfung als Teil eines Genehmigungsworkflows durchzuführen. Step Functions veröffentlicht eine Amazon SQS SQS-Nachricht, die ein Task-Token als Teil der Nachricht enthält. Ein externes System ist in Amazon SQS integriert und zieht die Nachricht aus der Warteschlange. Wenn das abgeschlossen ist, werden das Ergebnis und das ursprüngliche Task-Token zurückgegeben. Step Functions setzt dann seinen Arbeitsablauf fort.

SQS-Aufgabe, die auf die Rückgabe eines Aufgabentokens wartet

Das "Resource" Feld der Aufgabendefinition, das auf Amazon SQS verweist, ist .waitForTaskToken am Ende angehängt.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Dadurch wird Step Functions angewiesen, eine Pause einzulegen und auf das Task-Token zu warten. Wenn Sie eine Ressource mit .waitForTaskToken, abgeben, können Sie im "Parameters"-Feld Ihrer Zustandsdefinition mit einer speziellen Pfadbezeichnung ($$.Task.Token) auf das Aufgabentoken zugreifen. Der anfängliche $$. legt fest, dass der Pfad auf das Kontextobjekt zugreift und das Aufgabentoken für die aktuelle Aufgabe in einer laufenden Ausführung empfängt.

Wenn der Vorgang abgeschlossen ist, ruft der externe Service SendTaskSuccess oder SendTaskFailure mit taskToken auf. Erst danach wird der Workflow mit dem nächsten Zustand fortgesetzt.

Anmerkung

Wie zu vermeiden ist, dass unbegrenzt lange gewartet wird, wenn ein Prozess das Aufgabentoken nicht zusammen mit SendTaskSuccess oder SendTaskFailure sendet, finden Sie unter Konfigurieren einer Heartbeat-Zeitüberschreitung für eine wartende Aufgabe.

Abrufen eines Tokens von einem Kontextobjekt

Das Kontext-Objekt ist ein internes JSON-Objekt mit Informationen zu Ihrer Ausführung. Wie die Zustandsausgabe ist es über einen Pfad aus dem Feld "Parameters" während einer Ausführung zugänglich. Wenn aus einer Aufgabendefinition darauf zugegriffen wird, enthält es Informationen über die spezifische Ausführung, einschließlich des Aufgabentokens.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }

Sie können auf das Aufgabentoken mit einem speziellen Pfad innerhalb des "Parameters"-Felds Ihrer Aufgabendefinition zugreifen. Um auf die Eingabe oder das Kontextobjekt zuzugreifen, geben Sie zuerst an, dass der Parameter ein Pfad ist, indem Sie dem Parameternamen ein .$ anhängen. Das folgende Beispiel gibt Knoten sowohl über das Eingabe- und das Kontext-Objekt in einer "Parameters"-Spezifikation an.

"Parameters": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" },

In beiden Fällen wird Step Functions durch Anhängen .$ an den Parameternamen angewiesen, einen Pfad zu erwarten. Im ersten Fall ist "$" ein Pfad, der die gesamte Eingabe enthält. Im zweiten Fall gibt $$. an, dass der Pfad auf das Kontext-Objekt zugreift, und $$.Task.Token setzt den Parameter auf den Wert des Aufgabentokens in dem Aufgabentoken einer laufenden Ausführung.

Im Amazon SQS SQS-Beispiel weist das .waitForTaskToken "Resource" Feld Step Functions an, auf die Rückgabe des Aufgabentokens zu warten. Der "TaskToken.$": "$$.Task.Token" Parameter übergibt dieses Token als Teil der Amazon SQS SQS-Nachricht.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

Weitere Informationen über das Kontext-Objekt finden Sie unter Context-Objekt im Abschnitt Verarbeitung von Eingabe und Ausgabe in diesem Handbuch.

Konfigurieren einer Heartbeat-Zeitüberschreitung für eine wartende Aufgabe

Eine Aufgabe, die auf einen Aufgabentoken wartet, wartet, bis die Ausführung das einjährige Servicekontingent erreicht (siehe Kontingente im Zusammenhang mit staatlicher Drosselung). Um zu verhindern, dass Ausführungen hängen bleiben, können Sie eine Heartbeat-Zeitüberschreitung in Ihrer Zustandsautomatendefinition konfigurieren. Verwenden Sie das HeartbeatSeconds-Feld, um das Timeout-Intervall anzugeben.

{ "StartAt": "Push to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } } }

In dieser Zustandsmaschinendefinition sendet eine Aufgabe eine Nachricht an Amazon SQS und wartet darauf, dass ein externer Prozess mit dem bereitgestellten Task-Token zurückruft. Das "HeartbeatSeconds": 600-Feld legt das Intervall der Heartbeat-Zeitüberschreitung Intervall auf 10 Minuten fest. Die Aufgabe wartet auf die Rückgabe des Aufgabentokens mit einer der folgenden API-Aktionen:

Wenn die wartende Aufgabe innerhalb dieser 10 Minuten kein gültiges Aufgabentoken erhält, schlägt die Aufgabe mit dem Fehlernamen States.Timeout fehl.

Weitere Informationen finden Sie im Beispielprojekt Beispiel für ein Rückrufmuster (Amazon SQS, Amazon SNS, Lambda) für eine Callback-Aufgabe.