EC2 の起動・停止をタグで自動化する ❘ EventBridge Scheduler × Lambda 構成
- URL: https://dev.classmethod.jp/articles/start-stop-lambda-eventbridge
- 日付: 2026-06-24
- Tier: Tier 2
- 要旨: 複数 EC2 インスタンスをタグで絞り込み、Lambda と EventBridge Scheduler を使用して自動起動・停止をスケジューリングする方法。対象インスタンスに AutoSchedule=true タグを付与。Lambda 関数 2 種(起動用・停止用)を作成し、ec2.describe_instances でタグとインスタンス状態でフィルタして対象を絞り込み、StartInstances/StopInstances を実行。EventBridge Scheduler で cron ベース(平日 8:00 起動・20:00 停止など)のスケジュール設定。CloudWatch Logs で実行結果確認。インスタンス台数増加時もタグ管理で対応可能。
詳細
前提条件:対象 EC2 インスタンス存在、マネジメントコンソール操作権限。
タグ設定:キー AutoSchedule、値 true をタグエディタで対象インスタンスに付与。
IAM ロール2種:Lambda 用ロールはログ出力(CreateLogGroup・CreateLogStream・PutLogEvents)と EC2 操作(DescribeInstances・StartInstances・StopInstances)権限付与。EventBridge 用ロールは lambda:InvokeFunction 権限で起動用・停止用関数の ARN を Resource に指定し実行対象絞込。信頼エンティティは scheduler.amazonaws.com。
Lambda 関数実装:起動用は tag:AutoSchedule=true かつ stopped 状態、停止用は tag:AutoSchedule=true かつ running 状態でフィルタ。describe_instances で対象 InstanceId を抽出、start_instances/stop_instances で実行。対象がない場合は return で空実行。
EventBridge Scheduler:定期的な cron ベーススケジュール(東京タイムゾーン)。起動用 cron(0 8 ? * MON-FRI *)、停止用 cron(0 20 ? * MON-FRI *)。テンプレート化ターゲット AWS Lambda (invoke) で関数を指定、EventBridge 用ロール付与。
検証方法:インスタンス状態確認 → Lambda テストイベント実行 → OUTPUT で InstanceId 確認。スケジュール実行時刻に EC2 が起動・停止、CloudWatch Logs に実行結果出力で成功判定。SSM オートメーション方法も参照資料に言及。