この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部の夏目です。
指定した日時に処理を走らせたくなることはよくあると思います。
LambdaにはCloudWatch Scheduleトリガーがあるので簡単に実装できそうですが、これは予め実行したい日時がわかっている場合にしか使えません。 つまり、システムの中で日時を指定して実行させたい、みたいな要件にはCloudWatch Scheduleトリガーは合いません。
しかし、Step FunctionsのWait
Stateを使用すると、簡単に実装できます。
Step Functionsとは?
AWS Step Functions
視覚的なワークフローを使用して分散アプリケーションを構築します。
https://aws.amazon.com/jp/step-functions/
端的に言うと、Lambdaなどの処理をフローチャートのような形で実行できるサービスです。
詳しくは下記投稿を見てもらった方がわかりやすいと思います。
Wait State
Wait
StateはStepFunctionsで使用できるStateの一つで、ステートマシンの実行を途中で待機させることができます。
例えば、下記Stateでは10秒ステートマシンの実行を待機します。
State定義
"wait_ten_seconds" : {
"Type" : "Wait",
"Seconds" : 10,
"Next": "NextState"
}
実はこのWait
Stateは待機時間を記述する方法の他に、指定した日時まで待機することもできます。
下記例では、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を使うことで簡単に実装することができます。
使える局面は少ないかもしれないですが、活用してみてください。