StepFunctionsでLambdaの指定日時実行をしてみる

2019.08.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の夏目です。

指定した日時に処理を走らせたくなることはよくあると思います。

LambdaにはCloudWatch Scheduleトリガーがあるので簡単に実装できそうですが、これは予め実行したい日時がわかっている場合にしか使えません。 つまり、システムの中で日時を指定して実行させたい、みたいな要件にはCloudWatch Scheduleトリガーは合いません。

しかし、Step FunctionsのWait Stateを使用すると、簡単に実装できます。

Step Functionsとは?

AWS Step Functions
視覚的なワークフローを使用して分散アプリケーションを構築します。
https://aws.amazon.com/jp/step-functions/

端的に言うと、Lambdaなどの処理をフローチャートのような形で実行できるサービスです。

詳しくは下記投稿を見てもらった方がわかりやすいと思います。

AWS再入門ブログリレー AWS Step Functions 編

Wait State

Wait StateはStepFunctionsで使用できるStateの一つで、ステートマシンの実行を途中で待機させることができます。

例えば、下記Stateでは10秒ステートマシンの実行を待機します。

State定義

"wait_ten_seconds" : {
  "Type" : "Wait",
  "Seconds" : 10,
  "Next": "NextState"
}

実はこのWaitStateは待機時間を記述する方法の他に、指定した日時まで待機することもできます。 下記例では、UTC時間で2016年3月14日1時59分になるまで処理を待機します。

State定義

"wait_until" : {
  "Type": "Wait",
  "Timestamp": "2016-03-14T01:59:00Z",
  "Next": "NextState"
}

上記例では実行したい日時を直接State定義に記載しましたが、Stateに渡されるイベントから日時を取得することもできます。

イベント

{
  "expirydate": "2016-03-14T01:59:00Z"
}

State定義

"wait_until" : {
    "Type": "Wait",
    "TimestampPath": "$.expirydate",
    "Next": "NextState"
}

実行したい日時をイベントで渡すことで、それまで待機を行い好きなLambdaを実行することができます。

まとめ

Lambda単体では難しい、後からの指定日時実行ですがStepFunctionsを使うことで簡単に実装することができます。

使える局面は少ないかもしれないですが、活用してみてください。