🐯
Serverless Framework上で定義したステートマシンから別のステートマシンを呼び出す時の書き方
はじめに
あけましておめでとうございます、クラスメソッド AWS事業本部の筧です。
Serverless Framework には AWS Step Functions 用の ServerlessFramework プラグイン
serverless-step-functions が用意されています。serverless-step-functionsを利用することでstepFunctions.stateMachines
にステートマシンを定義ができます。
ところでstepFunctions.stateMachines
で定義したステートマシンから別のステートマシンを呼び出すにはどのように書けば良いのでしょうか。単純に言えば、別のステートマシンのARNを書けば良さそうです。しかし、別のステートマシンのARNをべた書きするのではなく、serverless.ymlの情報を参照させながらARNを書きたいとなると、少し悩むかと思います。
今回は上記を実際にやってみたのでやり方をご紹介します!
やってみた
まずserverless.ymlにステートマシンを直接定義すると、見にくくなるので別ファイルincludes/state-machines.yml
に外だししておきます。
serverless.yml(抜粋)
# 呼び出し元のステートマシンを定義
stepFunctions: ${file(includes/state-machines.yml)}
以下のように書くことで、別のステートマシンのARNをべた書きするのではなく、serverless.ymlの情報を参照させながらARNを書くことができました。
serverless.yml(抜粋)
provider:
stage: ${opt:stage, 'dev'}
#・・・(省略)
custom:
sampleService:
#呼び出し先のステートマシンを定義
prod:
STATEMACHINE_ARN: "ステートマシンARN"
stg:
STATEMACHINE_ARN: "ステートマシンARN"
dev:
STATEMACHINE_ARN: "ステートマシンARN"
#・・・(省略)
#呼び出し元のステートマシンを定義
stepFunctions: ${file(includes/state-machines.yml)}
includes/state-machines.yml(抜粋)
KickOtherStateMachine:
Type: Task
Resource: arn:aws:states:::states:startExecution
Parameters:
Input:
param.$: $
StateMachineArn: ${self:custom.sampleService.${opt:stage}.STATEMACHINE_ARN}
End: true
あとがき
別のステートマシンのARNをべた書きするのではなく、serverless.ymlの情報を参照させながらARNを書くことで、「hoge環境のステートマシンからは別のステートマシンのhoge環境を呼び出す」みたいなことを1つのファイルで実現できるかと思います。
それではまた!
Discussion