2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【小ネタ】EventBridge Schedulerのrate式とcron式の違い

Posted at

背景

EventBridgeとは?

Amazon EventBridge が、アプリケーション、統合された SaaS アプリケーション、および AWS のサービスから生成されたイベントを使用して、イベント駆動型アプリケーションの大規模な構築をより簡単にする方法を学びます。

EventBridgeにおける定時実行タスクの実現方法として、cron式とrate式があります。Linuxお馴染みの人なら、cronを難なく書けるでしょう。例えば、現在時刻18:30(18時30分)から一時間一回実行してほしいタスクに対して、EventBridgeで以下のようなcron式を使用します:

cron(30 * * * ? *) // 00:30, 01:30 ... 19:30, 20:00...で実行されます

rate式ならさらに簡単です:

rate(1 hour) // 設定時刻から一時間一回実行されます

しかし、このように同じく「1時間おきに一回実行」のタスクをcronrateで実現しようとすると、振る舞いが微妙に違います。

cron式とrate式の違い

EventBridgeで18:30に上記のcron式で設定しますと、一回目の実行は19:30となります。それに対して、同時刻にrate式で設定した場合、18:30(設定時刻から約40秒経つので18:31になる可能性も)ですぐ一回実行され、19:30で二回目の実行になります。

なぜこういう違いが生まれるのでしょう。考えられるのが、cronrateの思想の違いです。

image.png

「決められた時刻で実行」するのがcronです。18:30で設定した時点では、18:30という実行すべき時刻がすでに過ぎましたので、すぐには実行されず、19:30で一回目実行されます。

それに対して、rate式が「決められた時間内で一回実行される」ことを保証します。この場合、設定した時刻と関係なく、「一時間一回」のレートが保証されていますが、EventBridgeの場合設定した直後に一回目の実行がなされるような仕様です。

このような仕様が望ましくない場合、工夫も可能です。rate式を使いたいが設定後一回目の実行は不必要な場合、TimeframeStart date and timeが選択可能です。一時間一回実行の場合、開始時刻を設定時刻の一時間後に設置すれば、cron式と近い時刻で一回目の実行がなされます。

最後に

気軽に扱えそうなrate式ですが、EventBridgeにおいてこういった裏仕様もありますので要注意です。

表現力において、一般的に言うとcronの方が高いです。例えば、曜日指定や毎月〇日指定みたいなのはrate式じゃなかなかできません。が、「何分/時間/日おきに一回」的なタスクなら、rate式の方が難なくこなせたりします。なので、どっちを使え!じゃなくて基本その場の最適解を熟考する必要があります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?