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.
Entdecken Sie Serviceintegrationsmuster in Step Functions
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 zum nächsten Status übergehen, nachdem es eine HTTP Antwort erhalten hat.
-
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 es URI im "Resource"
Feld Ihrer Aufgabendefinition erstellen.
Möglichkeiten zum Aufrufen eines integrierten Service
Hinweise zur Konfiguration von AWS Identity and Access Management (IAM) für integrierte Dienste finden Sie unterSo generiert Step Functions 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 HTTP auf eine 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 SNS Amazon-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 Publish API of AmazonSNS. Der Workflow geht nach dem Aufrufen von zum nächsten Status über Publish
API.
Tipp
Informationen zur Bereitstellung eines Beispiel-Workflows, der das Request Response-Serviceintegrationsmuster für Ihren verwendet AWS-Konto, finden Sie unter Modul 2 — Request Response
Ausführen einer Aufgabe (.sync)
Bei integrierten Diensten wie AWS Batch Amazon kann Step Functions wartenECS, bis eine Anfrage abgeschlossen ist, bevor sie zum nächsten Status übergeht. Damit Step Functions warten kann, geben Sie das "Resource"
Feld in Ihrer Aufgabenstatusdefinition mit dem .sync
Suffix an, das nach der Ressource angehängt wird. URI
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:Verwalten Sie einen Batch-Job mit AWS Batch und 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 states:startExecution.sync
Functions-Aufgabe abgebrochen wird, wird die StopExecution
API Aktion Step Functions aufgerufen. 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 zu tätigen.
-
Ein vorübergehender Dienstausfall ist aufgetreten.
Wenn Sie das .sync
Dienstintegrationsmuster verwenden, verwendet Step Functions Polling, das Ihre zugewiesenen Quoten und Ereignisse nutzt, um den Status eines Jobs zu überwachen. Für .sync
Aufrufe innerhalb desselben Kontos verwendet Step Functions die EventBridge Ereignisse und AbfragenAPIs, die Sie im Status angeben. Task
Für kontoübergreifende .sync
Aufrufe verwendet Step Functions nur Polling. Beispielsweise führt Step Functions Abfragen für states:StartExecution.sync
das durch DescribeExecutionAPIund verwendet Ihr zugewiesenes Kontingent.
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)
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 .waitForTaskToken
Muster .sync
oder verwenden, sind zusätzliche Berechtigungen erforderlich. IAM Weitere Informationen finden Sie unter So generiert Step Functions IAM Richtlinien für integrierte Dienste.
In einigen Fällen möchten Sie vielleicht, dass Step Functions Ihren Workflow 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 mit einem SendTaskSuccess
SendTaskFailure
APIOR-Aufruf 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 Serviceintegrationen und auch an einige optimierte Serviceintegrationen ü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.
Um es .waitForTaskToken
mit einer AWS SDK Integration verwenden zu können, muss das, was API Sie verwenden, ü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
Eine Liste der integrierten Services, die das Warten auf ein Aufgabentoken unterstützen (.waitForTaskToken
) finden Sie unter Optimierte Integrationen für Step Functions.
Themen
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 SQS Amazon-Nachricht, die ein Task-Token als Teil der Nachricht enthält. Ein externes System integriert sich in Amazon SQS 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.
Das "Resource"
Feld der Aufgabendefinition, das auf Amazon SQS Include 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 Kontextobjekt ist ein internes JSON Objekt, das Informationen über Ihre Ausführung enthält. 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 SQS Amazon-Beispiel weist das "Resource"
Feld Step Functions an, .waitForTaskToken
auf die Rückgabe des Aufgabentokens zu warten. Der "TaskToken.$":
"$$.Task.Token"
Parameter übergibt dieses Token als Teil der SQS Amazon-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 Eingabe und Ausgabe verarbeiten 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 mit einer der folgenden API Aktionen darauf, dass das Aufgaben-Token zurückgegeben wird:
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 Erstellen Sie ein Beispiel für ein Callback-Muster mit Amazon SQSSNS, Amazon und Lambda für eine Callback-Aufgabe.