運用コスト削減のため、夜間のEC2インスタンスを自動で停止し、朝に自動で起動する仕組みを構築したいケースは多くあります。この記事では、AWS EventBridge(旧CloudWatch Events)とAWS Systems Manager(SSM) を組み合わせて、コード不要・Lambda不要でスケジュール制御を行う手順を解説します。
目次
構成概要
- EventBridge Scheduler(cron)で起動と停止の時間を定義
- EventBridge → SSM Run Command をトリガーとして EC2 に対して停止/起動を実行
- EC2インスタンスには SSM Agent を有効にし、SSMから操作可能な状態にしておく
前提条件
- 対象のEC2インスタンスにSSM Agentがインストール・有効化済み(Amazon Linux2などは標準で対応)
- EC2インスタンスにSSMとEC2の操作権限を持った IAMロール(例:AmazonSSMManagedInstanceCore + EC2フル権限) をアタッチ
- インスタンスがSSMから操作可能であること(SSM > Managed Instances に表示されている)
手順
1. EC2インスタンスIDの確認
対象のインスタンスID(例:i-0123456789abcdef0
)を控えておく。
2. Systems Manager Documents(SSM ドキュメント)の確認
AWSが提供している以下のSSMドキュメントを使います:
- 起動用:
AWS-StartEC2Instance
- 停止用:
AWS-StopEC2Instance
3. EventBridgeルールの作成(起動用)
- AWSマネジメントコンソールで EventBridge > スケジュール を開く
- 「スケジュールを作成」を選択
- 名前:
start-ec2-morning
- スケジュールパターン:
cron(0 8 ? * MON-FRI *)
(例:平日8時に起動) - ターゲット:
- タイプ:AWSサービス
- サービス:Systems Manager Run Command
- ドキュメント:
AWS-StartEC2Instance
- ターゲットのインスタンス:インスタンスIDを指定
4. EventBridgeルールの作成(停止用)
同様に以下の設定で夜の停止用スケジュールを作成:
- 名前:
stop-ec2-night
- スケジュールパターン:
cron(0 20 ? * MON-FRI *)
(例:平日20時に停止) - ターゲット:
- ドキュメント:
AWS-StopEC2Instance
- ターゲット:起動と同様に指定
- ドキュメント:
5. 動作確認
設定後、次回のスケジュールが来ると自動でインスタンスが起動・停止します。必要に応じて、EventBridgeの「履歴」から実行ログを確認可能です。
補足:Lambdaを使わない利点
従来はLambda関数で制御する方法が一般的でしたが、SSMドキュメントとEventBridgeを直接連携させることで、Lambda不要・管理工数削減・構成がシンプルになります。
まとめ
AWS EventBridgeとSSM Run Commandを組み合わせることで、手軽かつ安全にインスタンスの自動起動・停止を実現できます。特に開発環境や検証環境でのコスト削減に有効です。インスタンスの起動/停止以外にも、SSMを使えば各種バッチ処理の実行や自動運用の幅が広がります。