Step FunctionsをCLIで動かす

こんにちは、松田です。
前回はAPI Gatewayの統合タイムアウトをStep Functionsで対策しましたが、
今回はより詳しいStep Functionsの使用方法になります。
おまけとしてStep Functionsでの値の受け渡し、処理の分岐も試しています。
CLIからStep Functionsを操作する
1.Lambda関数の作成
関数1
exports.handler = async (event) => {
var test = {mozi:"abcd",suuti:5};
return test;
};
関数2
exports.handler = async (event) => {
console.log("eventInput");
console.log(event.Input);
console.log("event");
console.log(event);
return event;
};
関数2でevent(関数1)の値を受け取っていますが、これは次に記述するステートマシンの定義で受け取れるよう記述しています。
2.ステートマシンの作成
コンソール上から作成する場合は以下の定義を書き換えます。

CLIから作成する場合はコマンドプロンプトで以下を実行します。
C:\Users\daiki-matsuda>aws stepfunctions create-state-machine --name stepFunctionCli --definition file://C:/Users/daiki-matsuda/Desktop/StepFunctions/statemachine.json --role-arn "arn:aws:iam::************:role/service-role/StepFunctions-MyStateMachine-role"
{
"stateMachineArn": "arn:aws:states:us-east-1:************:stateMachine:stepFunctionCli",
"creationDate": "2020-10-12T16:16:44.873000+09:00"
}
statemachine.json
{
"Comment": "A Hello World example of the Amazon States Language using Pass states",
"StartAt": "callLambda1",
"States": {
"callLambda1": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:************:function:stepFunctionsTest1",
"Parameters": {
"Input.$": "$"
},
"Next": "if"
},
"if": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.mozi",
"StringEquals": "abcd",
"Next": "callLambda2"
}
],
"Default": "skip"
},
"callLambda2": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:************:function:stepFunctionsTest2",
"Parameters": {
"Input.$": "$"
},
"End": true
},
"skip": {
"Type": "Pass",
"End": true
}
}
}
上記の作業を行ってからstep Functionsのフローを見ると
以下のようになっているのが確認できると思います。

3.ステートマシンの実行
以下を実行するとステートマシンを実行させることができます。
C:\Users\daiki-matsuda>aws stepfunctions start-execution --state-machine-arn arn:aws:states:eu-east-1:************:stateMachine:stepFunctionCli --input file://C:/Users/daikimatsuda/Desktop/StepFunctions/input.json
以下のフローを見ると実行が確認できると思います。
今回は、ifでLambda1から送られたmozi:”abcd”を判定してLambda2に遷移しています。

悩んだ点
- statemachine.jsonで使ったchoiceの使い方が分かっていなかった。
使い方が分かるとかなり使い勝手がいいものだと感じました。 - file://の書き方を分かっていなかった
いつも通りにファイルパスをコピペしただけでは動作しなかった。
file://は初めて使ったが、今後も使う時があるかもしれないので、記述は覚えておきたい
まとめ
今回はあえてCLIからStep Functionsを触りましたが、
特別な理由がない限りはGUIで作成したほうが作りやすいと感じました。
ただCLIから触ることで実際の流れをより知れると思います。
ここまでご覧いただきありがとうございました!

- タグ:
- 新米エンジニア