Integrieren AWS Lambda in einem Step Functions Functions-Zustandsmaschine mit Amazon SQS und Amazon SNS - 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.

Integrieren AWS Lambda in einem Step Functions Functions-Zustandsmaschine mit Amazon SQS und Amazon SNS

Dieses Beispielprojekt zeigt, wie man integriert AWS Lambda Funktionen in Step Functions Functions-Zustandsmaschinen.

In diesem Projekt verwendet Step Functions Lambda-Funktionen, um einen Aktienkurs zu überprüfen und eine Kauf- oder Verkaufsempfehlung zu ermitteln. Der Benutzer erhält dann diese Empfehlung und kann wählen, ob er die Aktie kaufen oder verkaufen möchte. Das Ergebnis des Handels wird anhand eines SNS Themas zurückgegeben.

Weitere Informationen zu Step Functions Functions-Dienstintegrationen finden Sie im Folgenden:

Anmerkung

Für dieses Beispielprojekt können Gebühren anfallen.

Für neue AWS Für Benutzer ist ein kostenloses Nutzungskontingent verfügbar. Im Rahmen dieses Kontingents sind die Services bis zu einem bestimmten Nutzungsumfang kostenlos. Weitere Informationen zur AWS Kosten und das kostenlose Kontingent finden Sie unter Preise.

Schritt 1: Erstellen Sie die Zustandsmaschine

  1. Öffnen Sie die Step Functions Functions-Konsole und wählen Sie Create State Machine.

  2. Geben Sie Orchestrate Lambda functions in das Suchfeld ein und wählen Sie dann Orchestrate Lambda Funktionen aus den zurückgegebenen Suchergebnissen.

  3. Wählen Sie Next (Weiter), um fortzufahren.

  4. Wählen Sie „Demo ausführen“, um eine schreibgeschützte Version und einen ready-to-deploy Workflow zu erstellen, oder wählen Sie „Darauf aufbauen“, um eine bearbeitbare Zustandsmaschinen-Definition zu erstellen, auf der Sie aufbauen und diese später bereitstellen können.

    Dieses Beispielprojekt stellt die folgenden Ressourcen bereit:

    • Five Lambda Funktionen

    • Importieren in &S3; Amazon Simple Queue Service Warteschlange

    • Importieren in &S3; Amazon Simple Notification Service Thema

    • Importieren in &S3; AWS Step Functions Zustandsautomat

    • Verwandt AWS Identity and Access Management (IAM) Rollen

    Die folgende Abbildung zeigt das Workflow-Diagramm für Orchestrate Lambda Beispielprojekt für Funktionen:

    Workflow-Diagramm von Orchestrate Lambda Beispielprojekt für Funktionen.
  5. Wählen Sie Vorlage verwenden, um mit Ihrer Auswahl fortzufahren.

Die nächsten Schritte hängen von Ihrer vorherigen Auswahl ab:

  1. Führen Sie eine Demo durch — Sie können den Status Machine überprüfen, bevor Sie ein schreibgeschütztes Projekt mit Ressourcen erstellen, die bereitgestellt werden von AWS CloudFormation zu Ihrem AWS-Konto.

    Sie können sich die State-Machine-Definition ansehen. Wenn Sie bereit sind, wählen Sie Deploy and run, um das Projekt bereitzustellen und die Ressourcen zu erstellen.

    Die Bereitstellung kann bis zu 10 Minuten dauern, bis Ressourcen und Berechtigungen erstellt sind. Sie können den Stack-ID-Link verwenden, um den Fortschritt zu überwachen AWS CloudFormation.

    Nach Abschluss der Bereitstellung sollte Ihre neue Zustandsmaschine in der Konsole angezeigt werden.

  2. Darauf aufbauen — Sie können die Workflow-Definition überprüfen und bearbeiten. Möglicherweise müssen Sie Werte für Platzhalter im Beispielprojekt festlegen, bevor Sie versuchen, Ihren benutzerdefinierten Workflow auszuführen.

Anmerkung

Für Dienste, die für Ihr Konto bereitgestellt werden, können Standardgebühren anfallen.

Schritt 2: Führen Sie die Zustandsmaschine aus

Nachdem alle Ressourcen bereitgestellt und bereitgestellt wurden, wird das Dialogfeld Ausführung starten angezeigt.

  1. Wählen Sie auf der Seite State Machines Ihr Beispielprojekt aus.

  2. Wählen Sie auf der Seite mit dem Beispielprojekt die Option Ausführung starten aus.

  3. Gehen Sie im Dialogfeld Ausführung starten wie folgt vor:

    1. (Optional) Geben Sie einen benutzerdefinierten Ausführungsnamen ein, um den generierten Standard zu überschreiben.

      ASCIINichtnamen und Protokollierung

      Step Functions akzeptiert Namen für Zustandsmaschinen, Ausführungen, Aktivitäten und Bezeichnungen, die ASCII Nichtzeichen enthalten. Da solche Zeichen nicht mit Amazon funktionieren, empfehlen wir CloudWatch, nur ASCII Zeichen zu verwenden, damit Sie die Messwerte verfolgen können CloudWatch.

    2. (Optional) Geben Sie im Eingabefeld die Eingabewerte als einJSON. Sie können diesen Schritt überspringen, wenn Sie eine Demo ausführen.

    3. Wählen Sie Start execution (Ausführung starten) aus.

    Die Step Functions Functions-Konsole leitet Sie zu einer Seite mit den Ausführungsdetails weiter, auf der Sie Status in der Diagrammansicht auswählen können, um die zugehörigen Informationen im Einzelheiten zu den Schritten Bereich zu untersuchen.

Informationen zur Zustandsmaschine und ihrer Ausführung

Die Zustandsmaschine in diesem Beispielprojekt lässt sich integrieren in AWS Lambda indem Parameter direkt an diese Ressourcen übergeben werden, verwendet eine SQS Amazon-Warteschlange, um die Anfrage zur Genehmigung durch einen Mitarbeiter zu verwalten, und verwendet ein SNS Amazon-Thema, um die Ergebnisse der Abfrage zurückzugeben.

Eine Step Functions Functions-Ausführung empfängt einen JSON Text als Eingabe und leitet diese Eingabe an den ersten Status im Workflow weiter. Einzelne Staaten empfangen JSON Daten als Eingabe und geben JSON Daten normalerweise als Ausgabe an den nächsten Status weiter. In diesem Beispielprojekt wird die Ausgabe jedes Schritts als Eingabe an den nächsten Schritt im Workflow übergeben. Beispielsweise erhält der Schritt „Kauf-/Verkaufsempfehlung generieren“ die Ausgabe des Schritts „Aktienkurs prüfen“ als Eingabe. Darüber hinaus wird die Ausgabe des Schritts „Kauf-/Verkaufsempfehlung generieren“ als Eingabe an den nächsten Schritt, „Genehmigung durch einen Mitarbeiter anfordern“, übergeben, der einem menschlichen Genehmigungsschritt nachempfunden ist.

Anmerkung

Um die von einem Schritt zurückgegebene Ausgabe und die an einen Schritt weitergeleiteten Eingaben anzuzeigen, öffnen Sie die Seite mit den Ausführungsdetails für Ihre Workflow-Ausführung. Sehen Sie sich im Abschnitt Schrittdetails die Eingabe und Ausgabe für jeden Schritt an, den Sie im Anzeigemodus auswählen.

Um einen menschlichen Genehmigungsschritt zu implementieren, unterbrechen Sie in der Regel die Workflow-Ausführung, bis ein Task-Token zurückgegeben wird. In diesem Beispielprojekt wird eine Nachricht an eine SQS Amazon-Warteschlange übergeben, die als Auslöser für die Lambda-Funktion verwendet wird, die für die Verarbeitung der Callback-Funktionalität definiert ist. Die Nachricht enthält ein Task-Token und die vom vorherigen Schritt zurückgegebene Ausgabe. Die Lambda-Funktion wird mit der Nutzlast der Nachricht aufgerufen. Die Workflow-Ausführung wird angehalten, bis sie das Task-Token mit einem Aufruf zurückerhält. SendTaskSuccessAPI Weitere Informationen zu Task-Token finden Sie unter. Warten Sie auf einen Rückruf mit Task Token

Der folgende Code für die StepFunctionsSample-HelloLambda-ApproveSqsLambda Funktion zeigt, wie sie so definiert ist, dass alle Aufgaben, die von der SQS Amazon-Warteschlange über die Step Functions Functions-Zustandsmaschine eingereicht wurden, automatisch genehmigt werden.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

Sehen Sie sich diese Beispiel-Zustandsmaschine an, um zu sehen, wie Step Functions Lambda und Amazon SQS steuert.

Weitere Informationen darüber, wie AWS Step Functions kann andere kontrollieren AWS Dienstleistungen, sieheIntegration von Diensten mit Step Functions.

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

Informationen zur Konfiguration IAM bei der Verwendung von Step Functions mit anderen AWS Dienste finden Sie unterSo generiert Step Functions IAM Richtlinien für integrierte Dienste.

IAMBeispiele

Diese Beispiele AWS Identity and Access Management (IAM) Die durch das Beispielprojekt generierten Richtlinien beinhalten die geringsten Rechte, die für die Ausführung der Zustandsmaschine und der zugehörigen Ressourcen erforderlich sind. Wir empfehlen, dass Sie nur die Berechtigungen in Ihre IAM Richtlinien aufnehmen, die erforderlich sind.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

Informationen zur Konfiguration IAM bei der Verwendung von Step Functions mit anderen AWS Dienste finden Sie unterSo generiert Step Functions IAM Richtlinien für integrierte Dienste.