AWS Step Functionsステートマシンで指定した時間になるまでループを継続する

2022.06.09

この記事は公開されてから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な機能だけでしたいことを実現できました。

参考

以上