はじめに
今回はServerless Frameworkを使用して、Step Functionsのステートマシンを作成する方法をご紹介します。
今回ご紹介する方法は、Serverless FrameworkをDockerコンテナ上で実行する形にしています。
今回のサンプルプログラムは以下に置いてあります。
https://github.com/memememomo/sls-step-functions-sample
プロジェクトディレクトリの作成
まずは、プロジェクト用のディレクトリを作成します。
$ mkdir sls-step-functions-sample
$ cd sls-step-functions-sample
Dockerの設定ファイル作成と初期化
Serverless FrameworkをDockerで実行するための設定ファイルを作成します。
version: '3'
services:
sls:
build:
context: ./
dockerfile: Dockerfile
volumes:
- .:/opt/app
env_file:
- aws-credentials
FROM amaysim/serverless:1.60.0
WORKDIR /opt/app
COPY . /opt/app/
設定ファイルを作成したら、 docker-composeコマンドでビルドします。
$ docker-compose build
ServerlessFrameworkの初期化
Dockerコンテナ
上で、ServerlessFrameworkの初期化コマンドを実行します。
$ docker-compose run sls sls create -t aws-nodejs
$ docker-compose run sls npm init -y
ServerlessFrameworkのプラグインインストール
Step Functionsの設定をするために、プラグインをインストールする必要があります。以下のように、必要なプラグインをインストールします。
$ 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の設定ファイルに追記します。
plugins:
- serverless-step-functions
- serverless-pseudo-parameters
サンプル用のプログラムを作成
以下のように、hello
と world
をそれぞれ返す関数を定義します。
'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の設定ファイルに追記します。
functions:
hello:
name: hello
handler: handler.hello
world:
name: world
handler: handler.world
Step Functionsのステートマシンの設定
Step Functionsのステートマシンは正式にはJSONで定義するのですが、Serverless Frameworkの設定ファイルではYAMLで以下のように定義します。
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を順番に実行するステートマシンを定義しています。
デプロイと実行
以上で、ひととおりの設定が終わったので、以下のコマンドでデプロイします。
$ docker-compose run sls sls deploy
コマンドの実行が終わると、AWS上のStep Functionsのステートマシンが作成されます。「実行の開始」ボタンを押して実行すると、ステートマシンが正常に実行されることが確認できます。
以上が、Step Functionsの設定の流れとなります。
おわりに
Serverless Frameworkで、Step Functionsの設定を行う方法をご紹介しました。とっかかりとして、参考にしていただければ幸いです。