Status der Aufgabe - 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.

Status der Aufgabe

Ein Task-Zustand ("Type": "Task") steht für eine einzelne Arbeitseinheit, die von einem Zustandsautomaten durchgeführt wird. Eine Aufgabe erledigt Aufgaben mithilfe einer Aktivität oder AWS Lambda Funktion, durch Integration mit anderen unterstützten AWS-Services APIs oder durch Aufrufen einer Drittanbieter-API wie Stripe.

Die Sprache Amazon States stellt Aufgaben dar, indem sie den Typ eines Zustands auf setzt Task und der Aufgabe den Amazon-Ressourcennamen (ARN) der Aktivität, die Lambda-Funktion oder den API-Endpunkt eines Drittanbieters bereitstellt. Die folgende Task-State-Definition ruft eine Lambda-Funktion mit dem Namen auf. HelloFunction

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

Aufgabentypen

Step Functions unterstützt die folgenden Aufgabentypen, die Sie in einer Aufgabenstatusdefinition angeben können:

Sie geben einen Aufgabentyp an, indem Sie seinen ARN im Resource Feld einer Aufgabenstatusdefinition angeben. Das folgende Beispiel zeigt die Syntax des Resource Felds. Alle Task-Typen außer dem, der eine Drittanbieter-API aufruft, verwenden die folgende Syntax. Hinweise zur Syntax des HTTP-Tasks finden Sie unterRufen Sie APIs von Drittanbietern auf.

Ersetzen Sie in Ihrer Aufgabenstatusdefinition den kursiv geschriebenen Text in der folgenden Syntax durch die AWS ressourcenspezifischen Informationen.

arn:partition:service:region:account:task_type:name

In der folgenden Liste werden die einzelnen Komponenten dieser Syntax erklärt:

  • partitionist die am häufigsten zu verwendende AWS Step Functions Partitionaws.

  • servicegibt den Wert an, der zur Ausführung der Aufgabe AWS-Service verwendet wurde, und kann einer der folgenden Werte sein:

    • states für eine Aktivität.

    • lambdafür eine Lambda-Funktion. Wenn Sie eine Integration mit anderen AWS-Services, z. B. Amazon SNS oder Amazon DynamoDB, durchführen, verwenden Sie oder. sns dynamodb

  • regionist der AWS Regionalcode, in dem die Step Functions Functions-Aktivität oder der Zustandsmaschinentyp, die Lambda-Funktion oder eine andere AWS Ressource erstellt wurde.

  • accountist die AWS-Konto ID, in der Sie die Ressource definiert haben.

  • task_type ist der Typ der auszuführenden Aufgabe. Dabei kann es sich um einen der folgenden Werte handeln:

  • nameist der registrierte Ressourcenname (Aktivitätsname, Lambda-Funktionsname oder Service-API-Aktion).

Anmerkung

Step Functions unterstützt das Verweisen auf ARNs über Partitionen oder Regionen hinweg nicht. aws-cnKann beispielsweise keine Aufgaben in der aws Partition aufrufen und umgekehrt.

In den folgenden Abschnitten erhalten Sie weitere Informationen zu den einzelnen Aufgabentypen.

Aktivität

Aktivitäten repräsentieren Worker (Prozesse oder Threads), die von Ihnen implementiert und gehostet werden, die eine bestimmte Aufgabe ausführen. Sie werden nur von Standard-Workflows und nicht von Express-Workflows unterstützt.

Resource-ARNs von Aktivitäten verwenden die folgende Syntax.

arn:partition:states:region:account:activity:name
Anmerkung

Sie müssen Aktivitäten mit Step Functions (mithilfe einer CreateActivityAPI-Aktion oder der Step Functions Functions-Konsole) erstellen, bevor sie zum ersten Mal verwendet werden.

Weitere Informationen zum Erstellen einer Aktivität und zum Implementieren von Workern finden Sie unter Activities.

Lambda-Funktionen

Lambda-Aufgaben führen eine Funktion aus mit AWS Lambda. Um eine Lambda-Funktion anzugeben, verwenden Sie den ARN der Lambda-Funktion im Resource Feld.

Abhängig von der Art der Integration (Optimierte Integration oder AWS SDK-Integration), die Sie für die Angabe einer Lambda-Funktion verwenden, variiert die Syntax des Resource Felds Ihrer Lambda-Funktion.

Die folgende Resource Feldsyntax ist ein Beispiel für eine optimierte Integration mit einer Lambda-Funktion.

"arn:aws:states:::lambda:invoke"

Die folgende Resource Feldsyntax ist ein Beispiel für eine AWS SDK-Integration mit einer Lambda-Funktion.

"arn:aws:states:::aws-sdk:lambda:invoke"

Die folgende Task Zustandsdefinition zeigt ein Beispiel für eine optimierte Integration mit einer Lambda-Funktion namensHelloWorld.

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

Nachdem die im Resource Feld angegebene Lambda-Funktion abgeschlossen ist, wird ihre Ausgabe in den im Next Feld angegebenen Status (“ NextState „) gesendet.

Ein unterstützter AWS-Service

Wenn Sie auf eine verbundene Ressource verweisen, ruft Step Functions direkt die API-Aktionen eines unterstützten Dienstes auf. Geben Sie im Resource-Feld den Service und die Aktion an.

Die Resource-ARNs von verbundenen Services verwenden die folgende Syntax.

arn:partition:states:region:account:servicename:APIname
Anmerkung

Um eine synchrone Verbindung zu einer verbundenen Ressource herzustellen, fügen Sie .sync zum APIname-Eintrag im ARN an. Weitere Informationen finden Sie unter Arbeiten mit anderen -Services.

Beispielsweise:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }

Felder für den Aufgabenstatus

Zusätzlich zu den allgemeinen Zustandsfeldern haben Task-Zustände die folgenden Felder.

Resource (Erforderlich)

Ein URI, vor allem ein ARN, der bestimmte auszuführende Aufgaben identifiziert.

Parameters (Optional)

Wird für die Weitergabe von Informationen zu den API-Aktionen von verbundenen Ressourcen verwendet. Die Parameter können eine Mischung aus statischem JSON und verwenden JsonPath. Weitere Informationen finden Sie unter Parameter an eine Service-API übergeben.

Credentials (Optional)

Gibt eine Zielrolle an, die die Ausführungsrolle der Zustandsmaschine übernehmen muss, bevor die angegebene Resource Rolle aufgerufen wird. Alternativ können Sie auch einen JSONPath-Wert oder eine systeminterne Funktion angeben, die zur Laufzeit auf der Grundlage der Ausführungseingabe in einen IAM-Rollen-ARN aufgelöst wird. Wenn Sie einen JSONPath-Wert angeben, müssen Sie ihm die Notation voranstellen. $.

Beispiele für die Verwendung dieses Felds im Task Bundesstaat finden Sie unter. Beispiele für das Feld Anmeldeinformationen für den Aufgabenstatus Ein Beispiel für die Verwendung dieses Felds für den Zugriff auf eine kontoübergreifende AWS Ressource von Ihrem Zustandsmaschine aus finden Sie unterTutorial: Zugriff auf kontoübergreifende Ressourcen AWS.

Anmerkung

Dieses Feld wird von denAufgabentypen, die Lambda-Funktionen verwenden, und von einem unterstützten AWS Dienst unterstützt.

ResultPath (Optional)

Gibt an, wohin (in der Eingabe) die Ergebnisse der Ausführung der in Resource angegebenen Aufgabe zu platzieren sind. Die Eingabe wird dann wie vom Feld OutputPath festgelegt gefiltert (falls vorhanden), bevor sie als Ausgabe des Zustands verwendet wird. Weitere Informationen finden Sie unter Verarbeitung von Eingabe und Ausgabe.

ResultSelector (Optional)

Übergeben Sie eine Sammlung von Schlüsselwertpaaren, wobei die Werte statisch sind oder aus dem Ergebnis ausgewählt werden. Weitere Informationen finden Sie unter ResultSelector.

Retry (Optional)

Ein Array von Objekten namens Retrier, die eine Wiederholungsrichtlinie für den Fall definieren, dass der Zustand auf Laufzeitfehler trifft. Weitere Informationen finden Sie unter Beispiele für Zustandsmaschinen mit Retry und Catch.

Catch (Optional)

Ein Array von Objekten namens Catcher, die einen Fallback-Zustand definieren. Dieser Zustand wird ausgeführt, falls der Zustand auf Laufzeitfehler trifft und seine Wiederholungsrichtlinie ausgeschöpft wurde oder nicht definiert ist. Weitere Informationen finden Sie unter Fallback-Zustände.

TimeoutSeconds (Optional)

Gibt die maximale Zeit an, für die eine Aktivität oder eine Aufgabe ausgeführt werden kann, bevor das Timeout mit dem States.Timeout Fehler auftritt und fehlschlägt. Der Timeout-Wert muss eine positive Ganzzahl ungleich Null sein. Der Standardwert ist 99999999.

Die Anzahl der Timeouts beginnt, nachdem eine Aufgabe gestartet wurde, z. B. wenn ActivityStarted LambdaFunctionStarted Ereignisse im Verlauf der Ausführungsereignisse protokolliert werden. Bei Aktivitäten beginnt die Zählung mit dem GetActivityTask Empfang eines Tokens und ActivityStarted wird im Verlauf der Ausführungsereignisse protokolliert.

Wenn eine Aufgabe gestartet wird, wartet Step Functions innerhalb der angegebenen TimeoutSeconds Dauer auf eine Erfolgs- oder Fehlschlagsantwort des Aufgaben- oder Aktivitätsarbeiters. Wenn der Aufgaben- oder Aktivitätsarbeiter innerhalb dieser Zeit nicht reagiert, markiert Step Functions die Workflow-Ausführung als fehlgeschlagen.

TimeoutSecondsPath (Optional)

Wenn Sie einen Timeout-Wert dynamisch aus der Statuseingabe mithilfe eines Referenzpfads bereitstellen möchten, verwenden SieTimeoutSecondsPath. Wenn das Problem gelöst ist, muss der Referenzpfad Felder auswählen, deren Werte positive ganze Zahlen sind.

Anmerkung

Ein Task Status kann nicht sowohl als auch TimeoutSeconds enthalten. TimeoutSecondsPath

HeartbeatSeconds (Optional)

Bestimmt die Frequenz der Heartbeat-Signale, die ein Activity Worker während der Ausführung einer Aufgabe sendet. Heartbeats zeigen an, dass eine Aufgabe noch ausgeführt wird und mehr Zeit benötigt, bis sie abgeschlossen ist. Heartbeats verhindern, dass bei einer Aktivität oder Aufgabe innerhalb der Dauer ein Timeout auftritt. TimeoutSeconds

HeartbeatSecondsmuss ein positiver Ganzzahlwert ungleich Null sein, der unter dem TimeoutSeconds Feldwert liegt. Der Standardwert ist 99999999. Wenn zwischen den Heartbeats der Aufgabe mehr Zeit als die angegebenen Sekunden vergeht, schlägt der Task-Status mit einem Fehler fehl. States.Timeout

Bei Aktivitäten beginnt die Zählung mit dem GetActivityTask Empfang eines Tokens und ActivityStarted wird im Verlauf der Ausführungsereignisse protokolliert.

HeartbeatSecondsPath (Optional)

Wenn Sie einen Heartbeat-Wert dynamisch aus der Statuseingabe mithilfe eines Referenzpfads bereitstellen möchten, verwenden SieHeartbeatSecondsPath. Wenn das Problem gelöst ist, muss der Referenzpfad Felder auswählen, deren Werte positive ganze Zahlen sind.

Anmerkung

Ein Task Status kann nicht sowohl als auch HeartbeatSeconds enthalten. HeartbeatSecondsPath

Ein Task-Zustand muss entweder das Feld End auf true setzen, wenn der Zustand die Ausführung beendet, oder einen Zustand im Feld Next bereitstellen, der nach Abschluss des Task-Zustands ausgeführt wird.

Beispiele für die Definition von Aufgabenstatus

Die folgenden Beispiele zeigen, wie Sie die Definition des Aufgabenstatus entsprechend Ihren Anforderungen angeben können.

Timeouts und Heartbeat-Intervalle für den Aufgabenstatus

Es ist ein bewährtes Verfahren, für langlebige Aktivitäten einen Timeout-Wert und ein Heartbeat-Intervall festzulegen. Dies kann durch Angabe der Timeout- und Heartbeat-Werte oder durch dynamische Einstellung erreicht werden.

Beispiel für ein statisches Timeout und eine Heartbeat-Benachrichtigung

Wenn HelloWorld abgeschlossen ist, wird der nächste Zustand (hier NextState genannt) ausgeführt.

Wenn diese Aufgabe nicht innerhalb von 300 Sekunden abgeschlossen ist oder keine Heartbeat-Benachrichtigungen in Intervallen von 60 Sekunden sendet, wird die Aufgabe als failed gekennzeichnet.

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

Beispiel für ein dynamisches Task-Timeout und eine Heartbeat-Benachrichtigung

In diesem Beispiel wird nach Abschluss des AWS Glue Auftrags der nächste Status ausgeführt.

Wenn diese Aufgabe nicht innerhalb des vom AWS Glue Job dynamisch festgelegten Intervalls abgeschlossen werden kann, wird die Aufgabe als markiertfailed.

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }

Beispiele für das Feld Anmeldeinformationen für den Aufgabenstatus

Festcodierte IAM-Rollen-ARN angeben

Das folgende Beispiel spezifiziert eine Ziel-IAM-Rolle, die die Ausführungsrolle einer Zustandsmaschine annehmen muss, um auf eine kontoübergreifende Lambda-Funktion mit dem Namen zuzugreifen. Echo In diesem Beispiel wird der ARN der Zielrolle als hartcodierter Wert angegeben.

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo" }, "End": true } } }

JsonPath als IAM-Rollen-ARN angeben

Im folgenden Beispiel wird ein JsonPath-Wert angegeben, der zur Laufzeit in einen IAM-Rollen-ARN aufgelöst wird.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "$.roleArn" }, ... } } }

Spezifizierung einer systemeigenen Funktion als IAM-Rollen-ARN

Im folgenden Beispiel wird die States.Formatsysteminterne Funktion verwendet, die zur Laufzeit in einen IAM-Rollen-ARN aufgelöst wird.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)" }, ... } } }