こんにちは、松田です。
前回は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から触ることで実際の流れをより知れると思います。
ここまでご覧いただきありがとうございました!