はじめに
EC2の夜間停止設定を行うときにCloudFormationを使いました。
その時にややこしかったcron式についてまとめます。
問題
EC2を起動しておきたい時間帯は8:00~19:30の間で、それ以外の平日夜間と土日は
EC2を停止させる設定をAWS EventBridgeのルールで実現します。
その設定でcron式を用いるのですが、これが少しややこしく、
慣れていない方にとっては理解に少々時間がかかるかもしれません。
実際、私は10分ほどかかりました。
最初に作成したCloudformationテンプレート以下のとおりです。
Parameters:
ScheduleStartTime:
Type: String
Default: "cron(0 8 ? * MON-FRI *)"
ScheduleStopTime:
Type: String
Default: "cron(30 19 ? * MON-FRI *)"
--------------------------
(省略)
ぱっと見、上記のコードでうまく設定できているような気がします。
ですが、このままでは17時から起動し、夜中の4時30分に停止する
のような設定になってしまいます。
解決方法
EventBridgeのルールでcron式を用いる場合、UTC時間で考える必要があります。
詳しくは「UTC」と「JST」 - Linux技術者認定 LinuC | LPI-Japanを参考にしてほしいのですが、簡単にまとめると以下の通りです。
- UTCは協定世界時
- 経度0度の場所の時間
- JST(日本標準時)との時差は9時間
上記を加味すると、EventBridgeでのcron式の設定は以下のようにする必要がるのです。
Parameters:
ScheduleStartTime:
Type: String
Default: "cron(0 23 ? * MON-FRI *)"
ScheduleStopTime:
Type: String
Default: "cron(30 10 ? * MON-FRI *)"
--------------------------
(省略)
おわりに
EventBridge ルールのcron式もEventBridge スケジュールのcron式のように
JSTで設定できれば早いのに。。。