Problembehandlung bei Serviceintegrationen - 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.

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:

  1. 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.

  2. 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.

  3. Ä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.

  4. 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“ des 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.