この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービスグループの武田です。
前回AWS CDKを利用して、AWS Step Functionsのチュートリアルをやってみました。ツールの違いによる構築方法の比較をしたかったため、同じ環境をServerless Frameworkを利用して構築してみました。ただし厳密にはまったく同じではなく、CDKで自動的に設定している部分などまでは追従していません。
環境
次のような環境で検証しました。
$ node -v
v14.18.1
$ npm -v
8.1.1
$ sw_vers
ProductName: macOS
ProductVersion: 11.4
BuildVersion: 20F71
- Serverless Framework
- 2.64.1
- Serverless Step Functions
- 3.1.1
やってみた
まずはServerless Frameworkのプロジェクトを作成します。Lambda関数はPythonでもよかったのですがJavaScript(Node.js)にしてみました。プロジェクトが作成できたらStep Functions用のプラグインもインストールします。
$ npx serverless create -t aws-nodejs -n step-sls -p step-sls
$ cd step-sls
$ npm install -D serverless-step-functions
プラグインをインストールしたらserverless.yml
に設定を追記します。ファイルのコード全体は後ろに記載します。
serverless.yml
plugins:
- serverless-step-functions
Lambda関数のひな型がhandler.js
として用意されているため、Step Functionsのタスク状態から呼び出されるコードを定義します。
handler.js
'use strict';
module.exports.handler = async (event) => {
return "Hello World!";
};
続いてステートマシンの定義なども含めserverless.yml
を次のように修正します。stepFunctions
のセクションでステートマシンを定義しています。
serverless.yml
service: step-sls
frameworkVersion: '2'
plugins:
- serverless-step-functions
provider:
name: aws
runtime: nodejs14.x
lambdaHashingVersion: 20201221
region: ap-northeast-1
functions:
hello:
handler: handler.handler
timeout: 25
stepFunctions:
stateMachines:
StateMachine1:
name: SlsStateMachine
definition:
StartAt: HelloWorld
States:
HelloWorld:
Type: Task
Resource:
Fn::GetAtt: [hello, Arn]
Next: GreetedWorld
GreetedWorld:
Type: Succeed
準備が整いましたのでデプロイしてみましょう。筆者の環境ではprofileにIAMロールを使用しているため、環境変数を定義しています。
$ export AWS_SDK_LOAD_CONFIG=1
$ npx serverless deploy
また実行もコマンドラインから行えます。グローバルにインストールしていないことが原因なのか、レスポンスの内容が正常に表示されませんでした。
$ npx serverless invoke stepf --name StateMachine1
.
[object Object]
マネジメントコンソールにアクセスしてみると正常に終了していることが確認できました。ResultPathなどを定義していないため、HelloWorld
状態の結果のみが入力値となっています。
まとめ
AWS CDKで構成したものをServerless Frameworkでもやってみました。IAMロールの作成はどちらも自動的にやってくれるため意識する必要はありませんでした。ステートマシンの定義はCDKだとコードでしたが、Serverless Frameworkの場合はASL(Amazon ステートメント言語)を直接書くことになります。
CDKを採用する場合、CDKのコーディングに慣れていればステートマシンのメンテナンスも負荷が軽そうです。一方で、Workflow Studioで作ったものをベースにメンテナンスしていきたいといった場合にはServerless Frameworkに分があるでしょうか。なお、前回のCDKではLambda関数のコードをインラインで記述していましたが、別ファイルにもできるため、そこは差別化ポイントとはならないと考えます。
どちらもメリットはありますので、メンバーのスキルセットや好みで選ぶでもよさそうです。