概要
外部公開しているサイトにおいて、日時開閉局が必要というシステム要件を想定した自動開閉局の構成をAWS Systems Manager Documents (Authomation runbook) を使って実装してみました。
システム概要
- 環境コードは以下 GitHub にあげてますので、よかったら覗いてみてください
システム構成
システム構成図は以下の通りです。
フロントに ALB をおき、バックエンドの EC2 が静的ページを返すだけのシンプルな構成です。
監視を想定して AWS User Notifications で EC2 のプロセス監視を担う CloudWatch Alarm を検知するようにしています。
自動開閉局構成
流れは以下のとおりです。
- サイトの稼働時間を
Systems Manager Change Calenderで管理 -
Change Calenderから発行されたイベントをEventBridgeで検知 - 開閉局を実施する
Systems Manager Documents (Automation runbook)を実行
-
Change Calenderはカレンダーへ登録した時刻に対してOPENorCLOSEDのイベントをEventBridgeに連携してくれます - もしくは
GetCalenderStateAPI により直接OPENorCLOSEDを返してくれます
Documents (Automation runbook) 構成
ワークフローの全体構成は以下の通りです。
EventBridge からキックされた後、GetCalenderState API でカレンダーの状態が OPEN or CLOSED かを取得し分岐させます。
開局閉局の肝は、ALB の固定レスポンスを返すリスナールールの優先度を変更してる点です。
また今回の構成上、User Notifications の通知構成に関連付けている配信チャネルの登録・解除をスクリプトで実装しています。User Notifications の裏では EventBridge Rule が動いているのですが、このルールはAWS管理のもので無効化・削除ができません。そのため閉局時の通知抑止のためこのようにしています。
動作確認
閉局
Change Calender に登録したイベントの時刻を、数分後に終了するようにしています。

イベント終了時刻になったタイミングでイベントが発行されて、作成したEventBridge Rule が検知して Documents を実行してくれています。

開局
続けて確認するため、イベントの時刻が作業時刻を含むように修正します。

すると Change Calender のステータスが CLOSED → OPEN に変わり、作成したEventBridge Rule が検知して Documents を実行してくれています。

おわりに
今回は AWS Systems Manager Documents (Automation runbook) で自動開閉局を実装してみました。
Documents でワークフローを組みましたが、Step Functions でも同様に組めます。
Documents には、Step Functions にある Catch がないのと、ステートをループさせることができない点が惜しいですが、今回のように一方向のフローだけならシンプルに組めるのでおすすめです。
🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。
参考資料
リファレンス
- AWS Systems Manager - AWS Black Belt Online Seminer
- AWS Systems Manager Overview - AWS Black Belt Online Seminer
- AWS Systems Manager Change Calendar - AWS Systems Manager ユーザーガイド
ブログ
- 待望の機能!AWS Systems Manager Change Calendar でより柔軟な定期処理実行が可能に!! - DevelopersIO
- 「AWS Systems Manager ドキュメント」について調べてみる
- AWS Systems Manager Change Calendarに祝日や営業時間を設定してアプリケーションから利用する - DevelopersIO
- 運用自動化におけるAWS Systems Manager Change Calendarの活用
- AWS Systems Manager Change Calendarで祝日データのインポート時にエラーになった際の対処方法 - DevelopersIO
- AWS SSM Change Calendarの仕組み - Qiita




