【小ネタ】 SSM State ManagerとSSM Maintenance Windowsで利用できるcron式は異なる

【小ネタ】 SSM State ManagerとSSM Maintenance Windowsで利用できるcron式は異なる

2026.01.18

はじめに

皆様こんにちは、あかいけです。

知っていましたか?
SSM State Manager と SSM Maintenance Windows で利用できるcron式が異なることを…。

AWS Systems Managerでスケジュール実行を設定する際、
State Manager(関連付け)とMaintenance Windowsの両方でcron式を使用できます。
しかし、両者でサポートされているcron式のフォーマットには違いがあります。

私はこの違いを知らなかったため、「なぜかエラーになる…」という状況に陥りました。
そのためこのブログでは違いを整理してみました。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/reference-cron-and-rate-expressions.html

State Managerの場合

State Managerの関連付けでは、
5つの必須フィールドでcron式を指定します。

cron(分 時 日 曜日 年)
  • 制約
    • 月(Month)フィールドは指定できません
    • 曜日の範囲指定(例: MON-FRI)はサポートされていません
    • 曜日のカンマ区切り(例: MON,TUE,WED)もサポートされていません
    • 曜日は単一の値(例: MON)または*(毎日)のみ

サポートされているcron式のパターン

パターン cron式の例 説明
30分ごと cron(0/30 * * * ? *) 毎時0分と30分に実行
1、2、4、8、12時間ごと cron(0 0/4 * * ? *) 4時間ごとに実行
毎日特定時刻 cron(15 13 ? * * *) 毎日13:15に実行
毎週特定曜日 cron(15 13 ? * MON *) 毎週月曜日の13:15に実行
月の第n曜日 cron(30 23 ? * TUE#3 *) 毎月第3火曜日の23:30に実行
月の最後のX曜日 cron(0 0 ? * 3L *) 毎月最後の火曜日の0:00に実行

rate式の制約

State Managerのrate式にも制約があります。
(ドキュメントだと31日未満、という記載でしたが実際に作ってみたところ31日は作成可能で、32日以上は作成不可でした)

  • 30分以上かつ31日以下の間隔のみサポート
# OK
rate(30 minutes)
rate(1 hour)
rate(15 days)

# NG - 30分未満はサポートされない
rate(15 minutes)

# NG - 32日以上はサポートされない
rate(32 days)

Maintenance Windowsの場合

Maintenance Windowsでは、
6つの必須フィールドでcron式を指定します。

cron(分 時 日 月 曜日 年)
  • 特徴
    • すべてのcronおよびrate式をサポート
    • 月(Month)フィールドを指定できます(1-12またはJAN-DEC)
    • 曜日の範囲指定(例: MON-FRI)がサポートされています
    • 曜日のカンマ区切り(例: MON,TUE,WED)もサポートされています

Maintenance Windowsのcron式の例

パターン cron式の例 説明
毎日特定時刻 cron(15 10 ? * * *) 毎日10:15に実行
平日のみ cron(15 10 ? * MON-FRI *) 平日の10:15に実行 (※State Managerでは不可)
特定曜日(複数) cron(0 3 ? * MON,WED,FRI *) 月・水・金の3:00に実行 (※State Managerでは不可)
月の第n曜日 cron(0 2 ? * THU#3 *) 毎月第3木曜日の2:00に実行
毎月最終日 cron(0 2 L * ? *) 毎月最終日の2:00に実行
月の最終X曜日 cron(15 10 ? * 6L *) 毎月最終金曜日の10:15に実行
特定月のみ cron(0 0 1 JAN,JUL ? *) 1月と7月の1日0:00に実行 (※State Managerでは不可)

違いまとめ

項目 State Manager Maintenance Windows
必須フィールド数 5つ 6つ
月(Month)フィールド 非対応 対応(1-12, JAN-DEC)
曜日の範囲指定 非対応 対応(MON-FRIなど)
曜日のカンマ区切り 非対応 対応(MON,TUE,WEDなど)
#(第n曜日) 対応 対応
L(最終日/最終曜日) 対応 対応
rate式の制約 30分以上31日以下 制約なし

どう使い分ける?

State Managerを選ぶケース

  • マネージドノードの設定を継続的に維持したい場合
  • シンプルなスケジュール(毎日、毎週特定曜日など)で十分な場合

Maintenance Windowsを選ぶケース

  • 複雑なスケジュール(平日のみ、特定の月のみなど)が必要な場合

実際に困るケース

State Managerのcron式の制約により、以下のようなケースで困ることがあります。

パターン1: 平日のみ実行したい

「平日の深夜2時にのみSSM Run Commandを実行したい」という要件があった場合、
State Managerでは曜日の範囲指定ができないため、平日5日分の関連付けを個別に作成する必要があります。

# Maintenance Windowsなら可能
cron(0 2 ? * MON-FRI *)

# State Managerでは不可能(曜日範囲指定ができない)
# 代替案: 5つの関連付けを作成する必要がある
cron(0 2 ? * MON *)
cron(0 2 ? * TUE *)
cron(0 2 ? * WED *)
cron(0 2 ? * THU *)
cron(0 2 ? * FRI *)

パターン2: 特定の月にのみ実行したい

「半期に一度(1月と7月)の1日深夜にパッチ当てしたい」という要件があった場合、
State Managerでは月を指定できないため、素直にMaintenance Windowsを使った方が良さそうです。

# Maintenance Windowsなら可能
cron(0 0 1 JAN,JUL ? *)

パターン3: 四半期末に実行したい

「四半期末(3月、6月、9月、12月)の最終営業日に実行したい」という要件があった場合、
State Managerでは月を指定できないため、素直にMaintenance Windowsを使った方が良さそうです。

# Maintenance Windowsなら可能(最終金曜日の例)
cron(0 22 ? MAR,JUN,SEP,DEC 6L *)

備考: Quick SetupとState Managerの関係

Quick Setupを使ってPatch Managerのパッチポリシーを設定する場合、裏側でState Managerの関連付けが作成されます。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/patch-manager-policies.html

つまり、Quick SetupでPatch Managerのパッチポリシーを作成する場合、本記事で説明したState Managerのcron式の制約を受けることになります…。

実際に作成してみると、Quick Setupの作成まではできますが、その後裏側で作成されるCloudFormationが以下のようなエラーでデプロイが失敗します。

Resource handler returned message: "Invalid request provided: Schedule expression cron(0 2 ? * MON-FRI *) is currently not accepted. Supported expressions are every half, 1, 2, 4, 8 or 12 hour(s), every specified day and time of the week, or a specific day in a specific week of the month Supported examples are: cron(0 0/30 * 1/1 * ? *), cron(0 0 0/4 1/1 * ? *), cron(0 0 10 ? * SUN *), cron(0 0 10 ? * * *), cron(0 0 ? * TUE#2 *) (Service: Ssm, Status Code: 400, Request ID: 65753e4d-1ff9-424a-8d19-0f8f8ab72d59) (SDK Attempt Count: 1)" (RequestToken: af025d2c-99db-f1af-b0ba-bc4e3de44078, HandlerErrorCode: InvalidRequest)

さいごに

以上、SSM State ManagerとSSM Maintenance Windowsで利用できるサポートされているcron式の違いについてでした。

同じSystems Managerの機能でも、cron式のサポート範囲が異なるというのは意外と見落としがちなポイントです。
スケジュール設定でエラーが出た際は、まずこの違いを確認してみてください。

この記事が誰かのお役に立てば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事