⏲️
cloudformationでのEventBridgeのcronの指定の仕方
AWS EventBridgeのScheduleExpression
に使用されるCron表現は、Cronの形式に似ていますが、いくつかの独自の拡張があります。この表記を理解するためには、それぞれのフィールドがどのような意味を持つのかを知る必要があります。
対象読者
- cloudformationのEventBridgeのcronの指定の仕方について、忘れてしまい確認したい方
参考文献
chatGPTでまとめました
AWS EventBridgeで使用されるCron表現の各フィールドの説明
cron(Minutes Hours Day-of-month Month Day-of-week Year)
各フィールドの意味
- Minutes: 0から59の値を指定
- Hours: 0から23の値を指定
-
Day-of-month: 1から31の値を指定。または、特定の日付ではなく、特定の日に基づいてスケジュールを指定する場合には
?
を使用 - Month: 1から12の値を指定。または、JANからDECの省略形を使用できる。
-
Day-of-week: 1から7の値を指定します(1は日曜日、7は土曜日)。または、SUNからSATの省略形を使用できる。特定の日付でスケジュールを指定する場合には
?
を使用。 -
Year: 特定の年を指定(オプション)。指定しない場合は、
*
を使用。
例
cron(0 0 * * ? *)
- Minutes: 0 - 0分に実行
- Hours: 0 - 0時に実行
- Day-of-month: * - 毎日
- Month: * - 毎月
- Day-of-week: ? - 特定の日付に依存しない
- Year: * - 毎年
この表現は、「毎日0時0分にジョブを実行する」という意味に。
その他の例
-
cron(15 10 * * ? *)
: 毎日10:15に実行 -
cron(0 18 ? * MON-FRI *)
: 平日の18:00に実行 -
cron(0 0 1 1 ? *)
: 毎年1月1日の0:00に実行
よくある質問
-
?
と*
の違いは?-
*
はそのフィールドのすべての値を示します。例えば、Minutesフィールドに*
を指定すると、毎分実行されます。 -
?
は「このフィールドの値は気にしない」ことを示します。特にDay-of-monthとDay-of-weekフィールドで使用されます。どちらか一方に?
を指定する必要があります。
-
実際の例
毎日0時に特定のAPIエンドポイントを呼び出すCronジョブを設定するためのCloudFormationテンプレートで、ScheduleExpression
として以下のように記述します:
DailyEventRule:
Type: AWS::Events::Rule
Properties:
Name: DailyMidnightApiRule # EventBridgeルールの名前
ScheduleExpression: cron(0 0 * * ? *) # ルールを毎日0時にトリガーするCron表現
State: ENABLED # ルールの状態、ENABLEDまたはDISABLEDが指定可能
Targets:
- Arn: !GetAtt MyApiDestination.Arn # ターゲットAPIデスティネーションのARN
Id: DailyApiTarget # ターゲットの一意の識別子
RoleArn: !GetAtt ApiInvocationRole.Arn # API呼び出しに使用するIAMロールのARN
RetryPolicy:
MaximumRetryAttempts: 0 # リトライ回数を0に設定
このように設定することで、指定されたAPIエンドポイントが毎日0時に呼び出されるようになります。
Discussion