Erstellen einer Lambda State Machine für Step Functions mit demAWS CDK - 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.

Erstellen einer Lambda State Machine für Step Functions mit demAWS CDK

In diesem Tutorial erfahren Sie, wie Sie einen erstellenAWS Step FunctionsZustandsautomat mit einemAWS Lambda-Funktion mit demAWS Cloud Development Kit (AWS CDK). AWS CDK ist ein Infrastructure as Code (IAC)-Framework, mit dem Sie AWS-Infrastruktur mit einer vollwertigen Programmiersprache definieren können. Sie können eine App in einer der unterstützten Sprachen des CDK schreiben, die einen oder mehrere Stacks enthält. Dann können Sie es zu einemAWS CloudFormationVorlage und stellen Sie es auf IhremAWSKonto. Wir verwenden diese Methode, um eineAWS Step FunctionsZustandsautomat mit einemAWS LambdaFunktion, dann benutzeAWS Management Consoleum die Ausführung des Zustandsautomaten zu initiieren.

Bevor Sie mit diesem Tutorial beginnen, müssen Sie IhrenAWS CDKEntwicklungsumgebung wie beschrieben inErste Schritte mit demAWS CDK- VoraussetzungenInstallieren Sie dann dasAWS CDKmit dem folgenden Befehl imAWS CLI:

npm install -g aws-cdk

Dieses Tutorial führt zu dem gleichen Ergebnis wieErstellen einer Lambda-Zustandsmaschine für Step Functions mitAWS CloudFormation. In diesem Tutorial wird jedoch derAWS CDKerfordert keine Erstellung von IAM-Rollen;AWS CDKerledigt es für Sie. DieAWS CDKDie Version enthält auch einen Schritt „Erfolgreich“, um zu veranschaulichen, wie Sie Ihrer Zustandsmaschine zusätzliche Schritte hinzufügen.

Schritt 1: Einrichten IhresAWS CDKProjekt

Erstellen Sie zunächst ein Verzeichnis für Ihren neuenAWS CDKund initialisieren Sie das Projekt.

Anmerkung

Vergewissern Sie sich, dass Sie das Verzeichnisstep. DieAWS CDKDie -Anwendungsvorlage verwendet den Namen des Verzeichnisses, um Namen für Quelldateien und -klassen zu generieren. Wenn Sie einen anderen Namen verwenden, wird Ihre App nicht mit diesem Lernprogramm übereinstimmen.

TypeScript
mkdir step cd step cdk init --language typescript
JavaScript
mkdir step cd step cdk init --language javascript
Python
mkdir step cd step cdk init --language python

Nachdem das Projekt initialisiert wurde, aktivieren Sie die virtuelle Umgebung des Projekts und installieren Sie die Baseline-Abhängigkeiten von AWS CDK.

source .venv/bin/activate python -m pip install -r requirements.txt
Java
mkdir step cd step cdk init --language java
C#
mkdir step cd step cdk init --language csharp

Installieren Sie als Nächstes die Construct-Bibliotheksmodule fürAWS LambdaundAWS Step Functions.

TypeScript
npm install @aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
JavaScript
npm install @aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
Python
python -m pip install aws-cdk.aws-lambda aws-cdk.aws-stepfunctions python -m pip install aws-cdk.aws-stepfunctions-tasks
Java

Um Ihre App zu erstellen, führen Siemvn compileoder verwenden Sie Ihre Java-IDEsEntwicklungBefehl.

C#
dotnet add src\Step package Amazon.CDK.AWS.Lambda dotnet add src\Step package Amazon.CDK.AWS.Stepfunctions dotnet add src\Step package Amazon.CDK.AWS.Stepfunctions.Tasks

Sie können die angegebenen Pakete auch mit Visual Studio installieren NuGetGUI, verfügbar über-Tools>NuGet Package Manager>Verwalten NuGet Pakete für Solution.

Sobald Sie diese Module installiert haben, können Sie sie in IhremAWS CDKApp durch Importieren der folgenden Pakete:

TypeScript
@aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
JavaScript
@aws-cdk/aws-lambda @aws-cdk/aws-stepfunctions @aws-cdk/aws-stepfunctions-tasks
Python
aws_cdk.aws_lambda aws_cdk.aws_stepfunctions aws_cdk.aws_stepfunctions_tasks
Java
software.amazon.awscdk.services.lambda software.amazon.awscdk.services.stepfunctions software.amazon.awscdk.services.stepfunctions.tasks
C#
Amazon.CDK.AWS.Lambda Amazon.CDK.AWS.StepFunctions Amazon.CDK.AWS.StepFunctions.Tasks

Schritt 2: Verwenden derAWS CDKso erstellen Sie eine Lambda State Machine

Zuerst stellen wir die einzelnen Codeteile vor, die die Lambda-Funktion und die Step Functions Functions-Zustandsmaschine definieren. Dann erklären wir Ihnen, wie Sie sie in IhremAWS CDKApp. Schließlich erfahren Sie, wie Sie diese Ressourcen synthetisieren und bereitstellen.

So erstellen Sie eine Lambda-Funktion:

FolgendesAWS CDKcode definiert die Lambda-Funktion und stellt ihren Quellcode inline zur Verfügung.

TypeScript
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', { code: lambda.Code.fromInline(` exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; `), runtime: lambda.Runtime.NODEJS_12_X, handler: "index.handler", timeout: cdk.Duration.seconds(25) });
JavaScript
const helloFunction = new lambda.Function(this, 'MyLambdaFunction', { code: lambda.Code.fromInline(` exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; `), runtime: lambda.Runtime.NODEJS_12_X, handler: "index.handler", timeout: cdk.Duration.seconds(25) });
Python
hello_function = lambda_.Function(self, "MyLambdaFunction", code=lambda_.Code.from_inline(""" exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }"""), runtime=lambda_.Runtime.NODEJS_12_X, handler="index.handler", timeout=cdk.Duration.seconds(25))
Java
Function helloFunction = Function.Builder.create(this, "MyLambdaFunction") .code(Code.fromInline( "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );}")) .runtime(Runtime.NODEJS_12_X) .handler("index.handler") .timeout(Duration.seconds(25)) .build();
C#
var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps { Code = Code.FromInline(@"` exports.handler = (event, context, callback) => { callback(null, 'Hello World!'); }"), Runtime = Runtime.NODEJS_12_X, Handler = "index.handler", Timeout = Duration.Seconds(25) });

Sie können in diesem kurzen Beispielcode sehen:

  • Der logische Name der Funktion,MyLambdaFunction.

  • Der Quellcode für die Funktion, eingebettet als String in den Quellcode derAWS CDKApp.

  • Andere Funktionsattribute, wie die zu verwendende Laufzeit (Node 12.x), der Einstiegspunkt der Funktion und ein Timeout.

Erstellen eines Lambda-Zustandsautomaten

Unsere Zustandsmaschine hat zwei Zustände: unsere Lambda-Funktionsaufgabe und einen Erfolgszustand. Die Funktion erfordert, dass wir einen Step Functions erstellenAufgabedas ruft unsere Funktion auf. Dieser Aufgabenstatus wird als erster Schritt in unserer Zustandsmaschine verwendet. Der Erfolgsstatus wird der Zustandsmaschine mithilfe dieser Aufgabe hinzugefügtnext()-Methode. Der folgende Code ruft beide die Funktion aufMyLambdaTask, verwendet dannnext()Methode zum Festlegen eines Erfolgsstatus vonGreetedWorld

TypeScript
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', { definition: new tasks.LambdaInvoke(this, "MyLambdaTask", { lambdaFunction: helloFunction }).next(new sfn.Succeed(this, "GreetedWorld")) });
JavaScript
const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', { definition: new tasks.LambdaInvoke(this, "MyLambdaTask", { lambdaFunction: helloFunction }).next(new sfn.Succeed(this, "GreetedWorld")) });
Python
state_machine = sfn.StateMachine(self, "MyStateMachine", definition=tasks.LambdaInvoke(self, "MyLambdaTask", lambda_function=hello_function).next( sfn.Succeed(self, "GreetedWorld")))
Java
StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine") .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask") .lambdaFunction(helloFunction) .build() .next(new Succeed(this, "GreetedWorld"))) .build();
C#
var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps { Definition = new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps { LambdaFunction = helloFunction }).next(new Succeed(this, "GreetedWorld")) });

So erstellen Sie denAWS CDKApp

In Ihrem neu erstelltenAWS CDKproject, bearbeiten Sie die Datei, die die Definition des Stacks enthält, so, dass sie wie der folgende Beispielcode aussieht. Sie werden die Definitionen der Lambda-Funktion und der Step Functions Functions-Zustandsmaschine aus den vorherigen Abschnitten erkennen.

TypeScript

Aktualisierunglib/step-stack.tsmit dem folgenden Code:

import * as cdk from '@aws-cdk/core'; import * as lambda from '@aws-cdk/aws-lambda'; import * as sfn from '@aws-cdk/aws-stepfunctions'; import * as tasks from '@aws-cdk/aws-stepfunctions-tasks'; export class StepStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const helloFunction = new lambda.Function(this, 'MyLambdaFunction', { code: lambda.Code.fromInline(` exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; `), runtime: lambda.Runtime.NODEJS_12_X, handler: "index.handler", timeout: cdk.Duration.seconds(3) }); const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', { definition: new tasks.LambdaInvoke(this, "MyLambdaTask", { lambdaFunction: helloFunction }).next(new sfn.Succeed(this, "GreetedWorld")) }); } }
JavaScript

Aktualisierunglib/step-stack.jsmit dem folgenden Code:

const cdk = require('@aws-cdk/core'); const lambda = require('@aws-cdk/aws-lambda'); const sfn = require('@aws-cdk/aws-stepfunctions'); const tasks = require('@aws-cdk/aws-stepfunctions-tasks'); class StepStack extends cdk.Stack { constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const helloFunction = new lambda.Function(this, 'MyLambdaFunction', { code: lambda.Code.fromInline(` exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }; `), runtime: lambda.Runtime.NODEJS_12_X, handler: "index.handler", timeout: cdk.Duration.seconds(25) }); const stateMachine = new sfn.StateMachine(this, 'MyStateMachine', { definition: new tasks.LambdaInvoke(this, "MyLambdaTask", { lambdaFunction: helloFunction }).next(new sfn.Succeed(this, "GreetedWorld")) }); } } module.exports = { StepStack }
Python

Aktualisierungstep/step_stack.pymit dem folgenden Code:

from aws_cdk import core as cdk from aws_cdk import aws_lambda as lambda_ from aws_cdk import aws_stepfunctions as sfn from aws_cdk import aws_stepfunctions_tasks as tasks class StepStack(cdk.Stack): def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None: super().__init__(scope, construct_id, **kwargs) hello_function = lambda_.Function(self, "MyLambdaFunction", code=lambda_.Code.from_inline(""" exports.handler = (event, context, callback) => { callback(null, "Hello World!"); }"""), runtime=lambda_.Runtime.NODEJS_12_X, handler="index.handler", timeout=cdk.Duration.seconds(25)) state_machine = sfn.StateMachine(self, "MyStateMachine", definition=tasks.LambdaInvoke(self, "MyLambdaTask", lambda_function=hello_function).next( sfn.Succeed(self, "GreetedWorld")))
Java

Aktualisierungsrc/main/java/com.myorg/StepStack.javamit dem folgenden Code:

package com.myorg; import software.amazon.awscdk.core.Construct; import software.amazon.awscdk.core.Stack; import software.amazon.awscdk.core.StackProps; import software.amazon.awscdk.core.Duration; import software.amazon.awscdk.services.lambda.Function; import software.amazon.awscdk.services.lambda.Code; import software.amazon.awscdk.services.lambda.Runtime; import software.amazon.awscdk.services.stepfunctions.StateMachine; import software.amazon.awscdk.services.stepfunctions.Succeed; import software.amazon.awscdk.services.stepfunctions.tasks.LambdaInvoke; public class StepStack extends Stack { public StepStack(final Construct scope, final String id) { this(scope, id, null); } public StepStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); Function helloFunction = Function.Builder.create(this, "MyLambdaFunction") .code(Code.fromInline( "exports.handler = (event, context, callback) => { callback(null, 'Hello World!' );")) .runtime(Runtime.NODEJS_12_X) .handler("index.handler") .timeout(Duration.seconds(25)) .build(); StateMachine stateMachine = StateMachine.Builder.create(this, "MyStateMachine") .definition(LambdaInvoke.Builder.create(this, "MyLambdaTask") .lambdaFunction(helloFunction) .build() .next(new Succeed(this, "GreetedWorld"))) .build(); } }
C#

Aktualisierungscr/Step/StepStack.csmit dem folgenden Code:

using Amazon.CDK; using Amazon.CDK.AWS.Lambda; using Amazon.CDK.AWS.StepFunctions; using Amazon.CDK.AWS.StepFunctions.Tasks; namespace Step { public class StepStack : Stack { internal StepStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props) { var helloFunction = new Function(this, "MyLambdaFunction", new FunctionProps { Code = Code.FromInline(@"` exports.handler = (event, context, callback) => { callback(null, 'Hello World!'); }"), Runtime = Runtime.NODEJS_12_X, Handler = "index.handler", Timeout = Duration.Seconds(25) }); var stateMachine = new StateMachine(this, "MyStateMachine", new StateMachineProps { Definition = new LambdaInvoke(this, "MyLambdaTask", new LambdaInvokeProps { LambdaFunction = helloFunction }).Next(new Succeed(this, "GreetedWorld")) }); } } }

Speichern Sie die Quelldatei. Führen Sie dann dencdk synthim Hauptverzeichnis der App. DieAWS CDKführt die App aus und synthetisiert eineAWS CloudFormationVorlage daraus. DieAWS CDKzeigt dann die Vorlage an.

So stellen Sie die Lambda-Funktion und die Step Functions Functions-Zustandsmaschine tatsächlich auf IhremAWSkonto, problemcdk deploy. Sie werden aufgefordert, die IAM-Richtlinien zu genehmigen, die AWS CDK generiert hat.

Schritt 3: Starten der Ausführung eines Zustandsautomaten

Nach dem Erstellen des Lambda-Zustandsautomaten können Sie eine Ausführung starten.

Starten der Ausführung des Zustandsautomaten

  1. Öffnen SieStep Functions Konsoleund wählen Sie den Namen des Zustandsautomaten aus, den Sie mithilfe vonAWS CDK.

  2. Auf derMyStateMachine-ABCDEFGHIJ1KSeite, wählenNeue Ausführung.

    Die Seite New execution wird angezeigt.

  3. (Optional) Um Ihre Ausführung zu identifizieren, können Sie einen Namen für sie in derNameaus. Standardmäßig generiert Step Functions automatisch einen eindeutigen Ausführungsnamen.

    Anmerkung

    Mit Step Functions können Sie Zustandsautomaten-, Ausführungs- und Aktivitätsnamen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit Amazon CloudWatch. Um sicherzustellen, dass Sie verfolgen können CloudWatch metriken, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

  4. Wählen Sie Start Execution aus.

    Eine neue Ausführung Ihres Zustandsautomaten startet und eine neue Seite mit Ihrer laufenden Ausführung wird angezeigt.

  5. (Optional) Überprüfen Sie unter Execution Details (Ausführungsdetails) den Execution Status (Ausführungsstatus) sowie die Zeitstempel Started (Gestartet) und Closed (Geschlossen).

  6. Um die Ergebnisse Ihrer Ausführung anzuzeigen, wählen Sie Output (Ausgabe).

Schritt 4: Bereinigen

Nachdem Sie Ihre Zustandsmaschine getestet haben, empfehlen wir Ihnen, sowohl Ihre Zustandsmaschine als auch die zugehörige Lambda-Funktion zu entfernen, um Ressourcen in IhremAWS-Konto. Ausführen des scdk destroyim Hauptverzeichnis Ihrer App, um Ihren Zustandsautomaten zu entfernen.

Nächste Schritte

Weitere Informationen über die Entwicklung der AWS-Infrastruktur unter Verwendung von AWS CDK finden Sie im AWS CDK-Entwicklerhandbuch.

Informationen zum Schreiben von AWS CDK-Apps in der Sprache Ihrer Wahl finden Sie unter:

TypeScript

Arbeiten mit derAWS CDKin TypeScript

JavaScript

Arbeiten mit derAWS CDKin JavaScript

Python

Arbeiten mit AWS CDK in Python

Java

Arbeiten mit AWS CDK in Java

C#

Arbeiten mit AWS CDK in C#

Weitere Informationen über die AWS-Construct Library Module, die in diesem Lernprogramm verwendet werden, finden Sie im Abschnitt AWS CDK-API-Referenzübersichten unten.