概要
コード管理している環境にて、別箇所のコードを適用作業中にEventBridgeスケジューラが意図しない時間帯に実行されていると問い合わせがあり、
原因を調べたらEventBridgeスケジューラは過去日付を指定して変更を行うと、即時で実行されていることがわかりました。
該当コードは初期構築時点の過去日付を指定しており、作業時のタイミングではスケジューラはコンソール上から直近の日付にて変更されていました。
EventBridgeスケジューラ自体は1回のみ実行されるもので、作業中に初期構築時点の日付に変更されるとは認識していましたが、
過去日付であれば影響ないと思って作業したら上記事象に気がついたことが背景となります。
本記事は、この確認を行うため検証を行なったものとなります。
検証
やること
- 停止しているEC2に対して、インスタンスを起動させるEventBridgeスケジューラを設定する
- EventBridgeスケジューラは過去日付を設定(変更)して、EventBridgeスケジューラが動くことを確認する
- 検証の操作はコンソールにて行う
証跡
①インスタンス停止の状態を確認
②スケジューラを過去日付(2024/8/20)にて変更(作業時2024/8/27)
③インスタンスが起動したことを確認
④CloudTrailでもEventBridgeスケジューラ変更を行なった直後に、StartInstancesが記録されていることがわかる
結論
- EventBridgeスケジューラは、過去の日付を指定することでも実行が行われる
- EventBridgeスケジューラをコード管理している場合、意図しない実行に注意すること
- 注意パターン例
- パターン1:単独パターン実行のスケジューラ初期構築をインフラチームで対応、アプリチームが運用しているようなケースでアプリチームがコンソール上から日時変更を行なっていると、インフラチームがコード適用することによって初期構築時の日付に変更される。過去日付であっても即時で実行される
- パターン2:スケジューラを一時的に作成。日付は仮設定で、スケジューラを実行させたくないように過去日付で設定しても即時実行される
- 注意パターン例
過去日付であれば実行されないと思っていましたが、まさかの結果でした。
コンソール上からわざわざ過去日付に変更するようなケースはないと思いますが、コード管理していると実機上との差分が発生しても過去日付なら大丈夫と思ってしまいがちです。
1回のみ実行するEventBridgeスケジューラは、利用する時だけ有効化する等注意をしながら運用していくことが重要だと感じました。
以上です。