MMMブログ

Serverless Framework で Step Functions を設定する

このエントリーをはてなブックマークに追加

エンジニアの内山です。参加する予定だったイベントが、コロナの影響でことごとく中止になってしまいました。早く終息すると良いですね。

今回は、Serverless Frameworkを使用して、Step Functionsのステートマシンを作成する方法をご紹介します。

サンプルプログラムは以下に置いてあります。
https://github.com/memememomo/sls-step-functions-sample

DockerとServerless Frameworkをインストールしていることが前提です。

Docker
https://www.docker.com/

Serverless Framework
https://serverless.com/

プロジェクトディレクトリの作成

まずは、プロジェクト用のディレクトリを作成します。

1
2
$ mkdir sls-step-functions-sample
$ cd sls-step-functions-sample

Dockerの設定ファイル作成と初期化

Serverless FrameworkをDockerで実行するための設定ファイルを作成します。

1
2
3
4
5
6
7
8
9
10
version: '3'
services:
sls:
build:
context: ./
dockerfile: Dockerfile
volumes:
- .:/opt/app
env_file:
- aws-credentials
1
2
3
FROM amaysim/serverless:1.60.0
WORKDIR /opt/app
COPY . /opt/app/

設定ファイルを作成したら、 docker-composeコマンドでビルドします。

1
$ docker-compose build

ServerlessFrameworkの初期化

Dockerコンテナ
上で、ServerlessFrameworkの初期化コマンドを実行します。

1
2
$ docker-compose run sls sls create -t aws-nodejs
$ docker-compose run sls npm init -y

ServerlessFrameworkのプラグインインストール

Step Functionsの設定をするために、プラグインをインストールする必要があります。以下のように、必要なプラグインをインストールします。

1
2
$ docker-compose run sls npm install -D serverless-pseudo-parameters
$ docker-compose run sls npm install -D serverless-step-functions

Step Functionsプラグインの他に、疑似パラメーターを使用できるようになるプラグインもインストールしています。このプラグインにより、 #{AWS::AccountId}#{AWS::Region} などのパラメーターが設定ファイル上で使用できるようになります。

これらのプラグインを有効にするため、Serverless Frameworkの設定ファイルに追記します。

1
2
3
plugins:
- serverless-step-functions
- serverless-pseudo-parameters

サンプル用のプログラムを作成

以下のように、helloworld をそれぞれ返す関数を定義します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'use strict';

module.exports.hello = async event => {
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Hello',
},
null,
2
),
};
};

module.exports.world = async event => {
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'World',
},
null,
2
),
}
};

これらのLambda関数を作成するために、Serverless Frameworkの設定ファイルに追記します。

1
2
3
4
5
6
7
functions:
hello:
name: hello
handler: handler.hello
world:
name: world
handler: handler.world

Step Functionsのステートマシンの設定

Step Functionsのステートマシンは正式にはJSONで定義するのですが、Serverless Frameworkの設定ファイルではYAMLで以下のように定義します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
stepFunctions:
stateMachines:
HelloWorld:
name: hello-world
definition:
StartAt: Hello
States:
Hello:
Type: Task
Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:hello
Next: World
World:
Type: Task
Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:world
End: true

helloとworldを順番に実行するステートマシンを定義しています。

デプロイと実行

以上で、ひととおりの設定が終わったので、以下のコマンドでデプロイします。

1
$ docker-compose run sls sls deploy

コマンドの実行が終わると、AWS上のStep Functionsのステートマシンが作成されます。「実行の開始」ボタンを押して実行すると、ステートマシンが正常に実行されることが確認できます。

以上が、Step Functionsの設定の流れとなります。

おわりに

Serverless Frameworkで、Step Functionsの設定を行う方法をご紹介しました。とっかかりとして、参考にしていただければ幸いです。

このエントリーをはてなブックマークに追加

お問い合わせ

見積もり依頼や詳しいご相談など、クラウド・AWSに関する困りごとをお気軽にご相談ください。
以下のお問い合わせ先から受け付けています。

お問合わせはこちら

※通常1営業日内にご回答いたします。