
AWS Step Functionsステートマシンで指定した時間になるまでループを継続する
2022.06.09
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
最近、指定の時間になるまで所要の処理を継続して行うワークフローを作成する機会がありました。
そこで今回は、AWS Step Functionsで指定した時間になるまでループを継続するステートマシンを作ってみました。
作ったもの
次の定義のステートマシンを作成しました。
{
"Comment": "A description of my state machine",
"StartAt": "Wait",
"States": {
"Wait": {
"Type": "Wait",
"Seconds": 30,
"Next": "Choice"
},
"Choice": {
"Type": "Choice",
"Choices": [
{
"Variable": "$$.State.EnteredTime",
"TimestampGreaterThanPath": "$.timestampToContinue",
"Next": "Success"
}
],
"Default": "Wait"
},
"Success": {
"Type": "Succeed"
}
}
}
Waitタスクでは、ループ毎に30秒の待機時間を設けています。Choiceタスクでは、指定時間($.timestampToContinue)よりステート開始時間($$.State.EnteredTime)が大きければ次のタスク(Success)に進み、小さければループを継続するようにしています。

動作確認
現在から約2分後の時間を指定してステートマシンを実行してみます。
{
"timestampToEndExecution": "2022-06-09T14:21:00Z"
}

実行が開始されました。

指定時間まではループが行われます。

実行が終了しました。

Event Viewを見ると指定した時間を過ぎたらループが終了していますね!

おわりに
AWS Step Functionsで指定した時間になるまでループを継続するステートマシンを作ってみました。
ステートマシンのChoiceでTimestampGreaterThanPathなる演算子が使えたため、Lambda関数などに頼らずStep FunctionsのBuilt-inな機能だけでしたいことを実現できました。
参考
以上






