Systems Manager Quick Setup の Cron 式で「月の特定の日付」指定時にエラーが発生する原因と対処法
困っていること
Systems Manager Quick Setup において Cron 式で月次スケジュールを設定しようとしたところ「cron 式が無効です」というエラーが出てしまうのですが、原因と対処法を教えてください。
設定した式は以下のとおりです。
cron(0 8 10 * ? *)
フィールド | 値 | 意味 |
---|---|---|
分 | 0 | 0 分(毎時 0 分) |
時 | 8 | 8 時(午前 8 時) |
日 | 10 | 10 日(毎月 10 日) |
月 | * | 全ての月(1 月〜 12 月) |
曜日 | ? | 指定なし(日フィールドを使用するため) |
年 | * | 全ての年 |
原因
Quick Setup を使用すると、内部的に State Manager の関連付け設定が自動で作成されます。
しかし、この自動作成される関連付けでは、Cron 式の書き方に一部制限があり、すべてのスケジュールパターンを設定することができません。
今回エラーが発生した cron(0 8 10 * ? *) は、月の特定の日付(10 日)を指定していますが、State Manager の関連付け経由では、月の特定の日付を指定したスケジュール は非対応となるため、エラーが発生しました。
リファレンス: Systems Manager の Cron 式および rate 式 - AWS Systems Manager
関連付けは、1/2、1、2、4、8、または 12 時間ごと、毎日、毎週、n 日ごと、またはその月の最後の x 曜日などの特定の時間の cron 式をサポートしています。
どう対応すればいいの?
結論
残念ながら月の特定の日付を指定した設定はできませんが、上述のドキュメントに記載のとおり 月の n 週目の x 曜日 という設定は可能となります。
そのため、次の例のように「月の第 2 木曜日」に設定するような代替案が挙げられます。
cron(0 8 ? * THU#2 *)
フィールド | 値 | 意味 |
---|---|---|
分 | 0 | 0 分(毎時 0 分) |
時 | 8 | 8 時(午前 8 時) |
日 | ? | 指定なし(曜日フィールドを使用するため) |
月 | * | 全ての月(1 月〜 12 月) |
曜日 | THU#2 | 毎月第 2 木曜日 |
年 | * | 全ての年 |
やってみた
-
月の特定の日付を指定:cron(0 8 10 * ? *)
「cron 式が無効です」というエラーにより設定ができませんでした。
-
月の n 週目の x 曜日を指定:cron(0 8 ? * THU#2 *)
エラーは発生せず、正常に設定できました。