AWS CDK を使用してStep Functions 用の Lambda ステートマシンを作成 - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CDK を使用してStep Functions 用の Lambda ステートマシンを作成

このチュートリアルでは、AWS Step Functionsを含むステートマシンAWS Lambdaを使用した関数AWS Cloud Development Kit (AWS CDK)。AWS CDK は、本格的なプログラミング言語を使用して、AWS インフラストラクチャを定義することができるコードとしての Infrastructure as Code (IAC) フレームワークです。CDK でサポートされている言語の 1 つでアプリケーションを書くことができます。それから、それを合成してAWS CloudFormationテンプレートを作成し、AWSアカウント. このメソッドを使用してAWS Step Functionsを含むステートマシンAWS Lambda関数を選択し、AWS Management Consoleを使用してステートマシンの実行をスタートします。

このチュートリアルを開始する前に、AWS CDKで説明されている開発環境の使用開始AWS CDK-前提条件次に、AWS CDKで以下のコマンドを使用します。AWS CLI:

npm install -g aws-cdk

このチュートリアルでは、と同じ結果を生みます。AWS CloudFormation を使用して Step Functions 用の Lambda ステートマシンを作成する。ただし、このチュートリアルでは、AWS CDKIAM ロールを作成する必要はありません。AWS CDKこれはによって行われます。AWS CDK バージョンには、ステートマシンにさらにステップを追加する方法を説明する成功ステップも含まれています。

ステップ 1: のセットアップAWS CDKプロジェクト

まず、新しい AWS CDK アプリケーションのディレクトリを作成し、プロジェクトを初期化します。

注記

必ずディレクトリの名前はディレクトリ step としてください。AWS CDK アプリケーションテンプレートは、ディレクトリ名を使用し、ソースファイルとクラスの名前を生成します。別の名前を使用する場合は、アプリはこのチュートリアルと一致しません。

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

プロジェクトが初期化されたら、プロジェクトの仮想環境をアクティブにし、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

次に、のコンストラクトライブラリモジュールをインストールします。AWS LambdaそしてAWS 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

アプリを構築するには、mvn compileまたはお使いの Java IDE を使うビルドコマンド。

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

Visual Studio を使用して、示されたパッケージをインストールすることもできます。 NuGetGUI、経由で入手可能ツール>NuGet パッケージマネージャー>管理 NuGet ソリューションパッケージ

これらのモジュールをインストールすると、AWS CDK以下のパッケージをインポートしてアプリをインストールする:

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

ステップ 2: を使用するAWS CDKLambda ステートマシンを作成するには

まず、Lambda 関数と Step Functions ステートマシンを定義する個々のコードを提示します。次に、それらをあなたの中にまとめる方法を説明しますAWS CDKアプリ。最後に、これらのリソースを合成してデプロイする方法を見ていきます。

Lambda 関数を作成するには

以下のようになりますAWS CDKcode は Lambda 関数を定義し、ソースコードをインラインで提供します。

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) });

この短いコードで見ることができます:

  • 関数の論理名 MyLambdaFunction

  • AWS CDK アプリケーションのソースコードに文字列として埋め込まれている関数のソースコード。

  • 使用するランタイム (Node 12.x)、関数のエントリポイント、タイムアウトなど、その他の関数属性。

Lambda ステートマシンを作成するには

ステートマシンには、Lambda 関数タスクと成功の状態の 2 つの状態があります。この関数では、Step Functions を作成する必要がありますTaskそれが私たちの機能を呼び出します。このタスク状態は、ステートマシンの最初のステップとして使用されます。成功状態は、そのタスクを使用してステートマシンに追加されます。next()方法。次のコードは両方とも関数を呼び出しますMyLambdaTaskで、次にnext()成功状態を設定するメソッドGreetedWorld

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")) });

AWS CDK アプリケーションを構築してデプロイするには

新しく作成したAWS CDKプロジェクトで、スタックの定義を含むファイルを編集して、次のサンプルコードのようにします。Lambda 関数と Step Functions ステートマシンの定義を認識します。

TypeScript

更新lib/step-stack.tsを次のコードでを発行します。

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

更新lib/step-stack.jsを次のコードでを発行します。

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

更新step/step_stack.pyを次のコードでを発行します。

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

更新src/main/java/com.myorg/StepStack.javaを次のコードでを発行します。

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#

更新scr/Step/StepStack.csを次のコードでを発行します。

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")) }); } } }

ソースファイルを保存します。次に、cdk synthコマンドを使用します。-AWS CDKアプリを実行して、AWS CloudFormationそれからのテンプレート。-AWS CDKにテンプレートが表示されます。

Lambda 関数と Step Functions ステートマシンを実際に AWS アカウントにデプロイするには、cdk deploy を発行します。AWS CDK が生成されたIAM ポリシーを承認するよう求められます。

ステップ 3: ステートマシンの実行を開始する

Lambda ステートマシンを作成した後、実行を開始できます。

ステートマシンの実行をスタートするには

  1. Step Functions コンソールを開いて、AWS CDK を使用して作成したステートマシンの名前を選択します。

  2. リポジトリの []MyStateMachine-ABCDEFGHIJ1Kページで [] を選択します。新しい処刑

    [New execution] (新しい実行) ページが表示されます。

  3. (オプション) 実行を識別するには、[Name] (名前)ボックスに移動するとそのように表示されます。デフォルトでは、Step Functions は自動的に一意の実行名を生成します。

    注記

    Step Functions では、非 ASCII 文字を含むステートマシン、実行、およびアクティビティ名を作成できます。これらの非 ASCII 名は Amazon では機能しません CloudWatch。確実に追跡できるようにするため CloudWatch メトリクスの場合は、ASCII 文字のみを使用する名前を選択します。

  4. [Start Execution] (実行のスタート) を選択します。

    ステートマシンの新しい実行がスタートされ、実行中の実行が表示されている新しいページが表示されます。

  5. (オプション) [Execution Details] (実行の詳細) で、[Execution Status] (実行ステータス) および [Started] (開始済み) と [Closed] (終了済み) のタイムスタンプをレビューします。

  6. 実行結果を表示するには、[Output] (出力) タブを選択します。

ステップ 4: クリーンアップ

ステートマシンをテストしたら、ステートマシンと関連 Lambda 関数の両方を削除して、AWS アカウント。を実行cdk destroyコマンドを使用して、ステートマシンを削除します。

次のステップ

AWS CDK を使用して AWS インフラストラクチャの開発の詳細については、AWS CDK デベロッパーガイドを参照してください。

お好みの言語で AWS CDK アプリケーションを書く方法についての情報は、以下を参照してください:

TypeScript

の操作AWS CDKに TypeScript

JavaScript

の操作AWS CDKに JavaScript

Python

Python で AWS CDK を捜査 

Java

Java で AWS CDK を操作

C#

C# で AWS CDK を操作

このチュートリアルで使用する AWS ライブラリモジュールの構築についての詳細は、以下に示す AWS CDK API リファレンスの概要を参照してください。