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.
Problembehandlung bei Serviceintegrationen
Mein Job im Downstream-Dienst ist abgeschlossen, aber in Step Functions bleibt der Aufgabenstatus „In Bearbeitung“ oder die Fertigstellung ist verzögert.
Für .sync
Dienstintegrationsmuster verwendet Step Functions EventBridge Regeln, Downstream-APIs oder eine Kombination aus beiden, um den Downstream-Auftragsstatus zu ermitteln. Für einige Dienste erstellt Step Functions keine EventBridge Regeln zur Überwachung. Beispielsweise führt Step Functions für die AWS Glue Serviceintegration einen glue:GetJobRun
Aufruf durch, anstatt EventBridge Regeln zu verwenden. Aufgrund der Häufigkeit von API-Aufrufen besteht ein Unterschied zwischen der Erledigung der Downstream-Aufgabe und der Erledigungszeit der Step Functions-Aufgabe. Step Functions benötigt IAM-Berechtigungen, um die EventBridge Regeln zu verwalten und Aufrufe an den Downstream-Service zu tätigen. Weitere Informationen darüber, wie sich unzureichende Berechtigungen für Ihre Ausführungsrolle auf die Erledigung von Aufgaben auswirken können, finden Sie unterZusätzliche Berechtigungen für Aufgaben, die das Run a Job-Muster verwenden.
Ich möchte eine JSON-Ausgabe aus einer Nested State Machine-Ausführung zurückgeben.
Es gibt zwei synchrone Dienstintegrationen von Step Functions für Step Functions: startExecution.sync
und. startExecution.sync:2
Beide warten, bis die Nested-State-Maschine fertig ist, geben aber unterschiedliche Output
Formate zurück. Sie können verwendenstartExecution.sync:2
, um eine JSON-Ausgabe unter zurückzugebenOutput
.
Ich kann eine Lambda-Funktion nicht von einem anderen Konto aus aufrufen.
Zugriff auf die Lambda-Funktion mit kontoübergreifender Unterstützung
Wenn in Ihrer Region kontoübergreifender Zugriff auf AWS Ressourcen verfügbar ist, verwenden Sie die folgende Methode, um eine Lambda-Funktion von einem anderen Konto aus aufzurufen.
Gehen Sie wie folgt vor, um eine kontenübergreifende Ressource in Ihren Workflows aufzurufen:
Erstellen Sie eine IAM-Rolle in dem Zielkonto, das die Ressource enthält. Diese Rolle gewährt dem Quellkonto, das die State-Maschine enthält, Berechtigungen für den Zugriff auf die Ressourcen des Zielkontos.
Geben Sie in der
Task
Statusdefinition die Ziel-IAM-Rolle an, die von der State-Maschine übernommen werden soll, bevor die kontoübergreifende Ressource aufgerufen wird.Ändern Sie die Vertrauensrichtlinie in der Ziel-IAM-Rolle, damit das Quellkonto diese Rolle vorübergehend übernehmen kann. Die Vertrauensrichtlinie muss den Amazon-Ressourcennamen (ARN) der im Quellkonto definierten State-Maschine enthalten. Definieren Sie außerdem die entsprechenden Berechtigungen in der Ziel-IAM-Rolle, um die AWS Ressource aufzurufen.
Aktualisieren Sie die Ausführungsrolle des Quellkontos, sodass sie die erforderliche Berechtigung enthält, um die Ziel-IAM-Rolle zu übernehmen.
Ein Beispiel finden Sie unter Tutorial: Zugriff auf kontoübergreifende Ressourcen AWS.
Anmerkung
Sie können Ihren State Machine so konfigurieren, dass er eine IAM-Rolle für den Zugriff auf Ressourcen von mehreren AWS-Konten übernimmt. Eine State Machine kann jedoch zu einem bestimmten Zeitpunkt nur eine IAM-Rolle übernehmen.
Ein Beispiel für eine Task
Statusdefinition, die eine kontenübergreifende Ressource spezifiziert, finden Sie unterBeispiele für das Feld Anmeldeinformationen für den Aufgabenstatus.
Zugriff auf die Lambda-Funktion ohne kontoübergreifende Unterstützung
Wenn in Ihrer Region kein kontoübergreifender Zugriff auf AWS Ressourcen verfügbar ist, verwenden Sie die folgende Methode, um eine Lambda-Funktion von einem anderen Konto aus aufzurufen.
Verwenden Sie im Resource
Feld des Task
Bundesstaates die FunctionArn
In-Parameter arn:aws:states:::lambda:invoke
und übergeben Sie sie. Die IAM-Rolle, die der State-Maschine zugeordnet ist, muss über die richtigen Berechtigungen verfügen, um kontoübergreifende Lambda-Funktionen aufzurufen:. lambda:invokeFunction
{ "StartAt":"CallLambda", "States":{ "CallLambda":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke", "Parameters":{ "FunctionName":"arn:aws:lambda:us-west-2:123456789012:function:my-function" }, "End":true } } }
Ich kann keine von .waitForTaskToken
Staaten übergebenen Aufgabentokens sehen.
Im Parameters
Feld des Task
Bundesstaates müssen Sie ein Task-Token übergeben. Sie könnten beispielsweise etwas Ähnliches wie den folgenden Code verwenden.
{ "StartAt":"taskToken", "States":{ "taskToken":{ "Type":"Task", "Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken", "Parameters":{ "FunctionName":"get-model-review-decision", "Payload":{ "token.$":"$$.Task.Token" }, }, "End":true } } }
Anmerkung
Sie können versuchen, es .waitForTaskToken
mit jeder API-Aktion zu verwenden. Einige APIs haben jedoch keine geeigneten Parameter.