Help us understand the problem. What is going on with this article?

AWS_Cron式のワイルドカード

More than 1 year has passed since last update.

概要

  • AWSのCloudWatchEventsでスケジュールをcron式で設定する際に詰まったので、Qiitaに残しておく

基本書式

  • 例: 2017/1/1 11時11分に実行する場合

    11 11 1 1 ? 2017 
    
    • 左から[分] [時] [日] [月] [曜日] [年] 6つの必須フィールドでできている
      ※普通のcron式だとはないので注意
  • それぞれのフィールドが取る値は下記のようになっている

    フィールド ワイルドカード
    0 - 59 , - * /
    時間 0 - 23 , - * /
    1 - 31 , - * ? / L W
    1 - 12 または JAN-DEC , - * /
    曜日 1 - 7 または SUN - SAT , - * ? / L
    1970 - 2199 , - * /

ワイルドカード

種類

  • CloudWatchEvensのルールのスケジュール式で使えるワイルドカードは全部で7つ

    ワイルドカード 用途
    , 同じフィールド内に複数の値を追加できる
    - 範囲を指定できる
    * フィールドの持つ値を全てを含む
    / 増分指定ができる
    ? 任意を意味する
    使えるのはday-of-month(日)フィールドday-of-week(曜日)フィールド
    L 月、または週の最終日を指定できる
    使えるのはday-of-month(日)フィールドday-of-week(曜日)フィールド
    W ◯日に一番近い平日を指定できる
    使えるのはday-of-month(日)フィールド

使い方

  • ワイルドカードの使い方について、例とともに書いていきます。

同じフィールド内に複数の値を追加できる( , )

例 : 2000年と2017年1月と2月1日と10日と15日0時と12時1分と30分と59分に実行

1,30,59 0,12 1,10,15 1,2 ? 2000,2017

範囲を指定できる( - )

例 : 1980年から1990年(毎年)8月から10月(毎月)15日から20日(毎日)10時から13時(毎時)1分から5分に実行

1-5 10-13 15-20 8-10 ? 1980-1990

フィールドの持つ値を全てを含む( * )

例 : 毎分実行

* * * * ? *

増分指定ができる( / )

例 : 2000年から10年毎1月から2ヶ月毎1日から3日毎0時から5時間毎0分から15分毎に実行

0/15 0/5 1/3 1/2 ? 2000/10

月、または週の最終日を指定できる( L )

例1 : 毎月末最終日0時0分に実行

0 0 L * ? *

例2 : 毎週末最終日0時0分に実行

0 0 ? * L *

◯日に一番近い平日を指定できる( W )

例 : 毎月15日に最も近い平日0時0分に実行

0 0 15W * ? *
  • 上記cron式は15日が平日か土日かによって実行タイミングが下記のように変わる
    1. 15日が平日の場合
      • 15日に実行される
    2. 15日が土曜日の場合
      • 15日に最も近い平日は14日の金曜日なので、14日に実行される
    3. 15日が日曜日の場合
      • 15日に最も近い平日は16日の月曜日なので、16日に実行される

任意を意味する( ? )

  • おそらく曜日のところだけに毎回出てくる?にみなさん疑問をお持ちだったことでしょう。ここで解説します。
  • 公式のドキュメントにも書いてありますがAWSのCron式には下記のような制限があります。

    Cron式の日フィールド及び曜日フィールドを同時に指定することはできません。 
    一方のフィールドに値を指定すると、
    もう一方のフィールドで ? (疑問符) を使用する必要があります。
    
    • ということでこれはもうこういう決まりと覚えてください(笑
      なので、日付を指定する場合は曜日に?、曜日を指定する場合は日付に?を必ず付けてください

例1 : 毎月1日(曜日は問わない)の0時0分に実行

0 0 1 * ? *

例2 : 毎週日曜日(日付は問わない)の0時0分に実行

0 0 ? * SUN *

最後に

  • AWSのCloudWatchEventsのルールのスケジュールでCron式を設定する際に、ルール作成までしなくても、正しい設定の場合は、以降10回分の実行タイミングが表示されるので、試しにやってみるとわかりやすいと思います!
da-sugi
1年目はRuby on Railsでのフロントエンド開発、2年目は主にインフラ・DWH周りの開発 3年目Webエンジニアを極め始めAWSとかGTMとかGAとかもちょこちょこ触ってました 4年目ScalaとVue.js始めました 5年目引き続きScalaとVue.jsを続けて, AWSのデベロッパーアソシエイト資格取ろうとしてます 細かいことも残していくスタイル
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした