この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部 IoT事業部の若槻です。
最近、指定の時間になるまで所要の処理を継続して行うワークフローを作成する機会がありました。
そこで今回は、AWS Step Functionsで指定した時間になるまでループを継続するステートマシンを作ってみました。
作ったもの
次の定義のステートマシンを作成しました。
State Machine Definition
{
"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な機能だけでしたいことを実現できました。
参考
以上