⏲️

cloudformationでのEventBridgeのcronの指定の仕方

2024/06/12に公開

AWS EventBridgeのScheduleExpressionに使用されるCron表現は、Cronの形式に似ていますが、いくつかの独自の拡張があります。この表記を理解するためには、それぞれのフィールドがどのような意味を持つのかを知る必要があります。

対象読者

  • cloudformationのEventBridgeのcronの指定の仕方について、忘れてしまい確認したい方

参考文献

https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-cron-expressions.html

chatGPTでまとめました

AWS EventBridgeで使用されるCron表現の各フィールドの説明

cron(Minutes Hours Day-of-month Month Day-of-week Year)

各フィールドの意味

  1. Minutes: 0から59の値を指定
  2. Hours: 0から23の値を指定
  3. Day-of-month: 1から31の値を指定。または、特定の日付ではなく、特定の日に基づいてスケジュールを指定する場合には?を使用
  4. Month: 1から12の値を指定。または、JANからDECの省略形を使用できる。
  5. Day-of-week: 1から7の値を指定します(1は日曜日、7は土曜日)。または、SUNからSATの省略形を使用できる。特定の日付でスケジュールを指定する場合には?を使用。
  6. 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