EventBridge Scheduler で EC2 を自動起動・停止させるときのメモ
■ スケジュールの種類
EventBridge Scheduler を作るときは、
options がいろいろあるけれど 「定期的なスケジュール(cron)」 を選ぶ。
rate の方は今回使わない。
■ タイムゾーン
ここを毎回忘れる。
デフォルトが UTC なので、必ず Asia/Tokyo(UTC+09:00) に変える。
UTC のままで設定すると、9 時にしたつもりが 0 時とかに動いてしまうので注意。
■ cron のフィールド(GUI)
GUI に 6 つ並んでいるやつ。
一応、順番はこんな感じ。
- 分 → 0
- 時間 → 8(起動)、22(停止)
- 日付 →
?(ここは毎回これ) - 月 →
* - 曜日 → ここだけ用途で変える(後述)
- 年 →
*
「日付は ? にして、曜日で指定する」のを忘れがち。
これ逆にすると怒られる(排他)。
■ 用途ごとの曜日欄の書き方
GUI の「曜日」に直接書く。
- 土日だけ →
SAT,SUN - 平日だけ →
MON-FRI - 毎日 →
*
あとは時間を 8 → 起動/22 → 停止 に変えるだけ。
土日だけ朝 8 時なら、GUI にこう入れる:
0 / 8 / ? / * / SAT,SUN / *
平日だけ 22 時なら:
0 / 22 / ? / * / MON-FRI / *
■ EC2 を動かすターゲット設定
ターゲットは以下のパターン。
- 種類:AWS SDK call
- サービス:EC2
-
アクション:
- 起動 → StartInstances
- 停止 → StopInstances
{
"InstanceIds": ["i-xxxxxxxxxxxxxx"]
}
複数あればカンマ区切りで増やすだけ。
■ IAM ロール
Scheduler が実行するときに使うロールが必要。
ここは細かく書いてもしょうがないので最低限だけ。
- Trust Policy は
scheduler.amazonaws.comに AssumeRole を許可 - EC2 の Start/Stop ができれば良い
暗号化EBSを使ってる場合だけ KMS の権限でつまづくことがある。
■ 注意点
- タイムゾーンを戻し忘れる
- 「日付」と「曜日」を両方指定してしまう
- Auto Scaling や SSM StateManager のポリシーで勝手に再起動される
- Start/Stop を 1 つのスケジュールでやろうとして失敗(別々に作る)
- IAM ロールの信頼関係を間違えると動かない(scheduler.amazonaws.com)
■ まとめ
- cron で作る
- 日付は
? - 曜日は
MON-FRIとかSAT,SUN - タイムゾーンは Tokyo
- StartInstances / StopInstances を target にする

