Change CalendarとAutomationを使って、指定期間中はEC2が起動しても自動で停止するようにしてみた
はじめに
こんにちは、おかのです。
最近チャレンジしていることは出勤前のジム通いです。
突然ですがSystems Manager Change Calendar(以下Change Calendar)というサービスをご存じでしょうか?
本サービスではGUI上のカレンダーに対して、直感的にイベント登録をすることができます。
イベントにはOPEN/CLOSEの状態を設定でき、この状態を他のAWSサービスと組み合わせることで様々なコントロールを行うことが可能です。
今回の記事ではChange Calendarを使って、特定のイベント中にEC2が起動されても自動で停止する仕組みを作成してみます。
シナリオ
- 特定のイベント期間中はEC2を起動してはならない
- そのルールを知らない運用者がEC2を起動する可能性があります
- 管理者はそのような事態が起こりえると懸念しており、以下の対応をしてほしい
- 勝手にEC2を起動されたとしても自動で停止してほしい
- 勝手に起動された事実をメール通知で把握したい
構成図
このような構成でシナリオに沿った検証を行います。

やってみた
Change Calendar設定
まずはカレンダーの登録を行います。

イベントを作成した期間はCLOSEとなるように、カレンダータイプはデフォルトで開く(OPEN)とします。

カレンダーが作成できました。

次にイベントを作成します。

イベントが作成できました。

Change Calendarの設定は以上です。
SNS設定
次にChange Calendarと組み合わせるサービスの設定を行います。
イベント中にEC2が起動され、停止したことをメール通知するSNSを作成しました。

Systems Manager Automation設定
EventBridgeからキックされるSystems Manager Automation(以下Automation)を作成しました。
このAutomationでは以下フローを設定しています。
- Automationがキックされた時点で、Change Calendar上のカレンダー状態がOPENかどうかを確認
- OPENなら後続処理なし
- CLOSEなら以下処理を実施
- EC2の停止
- SNS通知

EventBridge設定
EC2が起動したイベントを検知するEventBridgeを作成しました。

ターゲットにAutomationを指定しました。

動作検証
それでは動作検証です。CLOSE中にEC2を起動してみます。

EC2を起動しました。

EC2が起動中なった後、すぐに停止中になり、停止済みとなりました。


EventBridgeがイベントを取得し、Automationが起動していました。
エラーと表示されているのは処理フローがfalseのルートを通ったためであり、想定通りの挙動です。

SNSからメールが送信されていました。

まとめ
このようにChange Calendarを使って直感的にスケジュール登録することができ、処理をコントロールすることが出来ました。
今回はEC2の自動停止を行いましたが、他のAutomationアクションと組み合わせればさまざまな運用要件に対応できる可能性を感じます。
この記事が少しでも参考になれば幸いです。







