はじめに
この記事では、EC2を特定の時間に自動停止する仕組みを
- EventBridge Schedulerを使ったシンプルな方法
- Systems Manager Automationを使った運用向きの方法
の2つの実装方法で紹介します。
実際に社内勉強会で行ったハンズオン内容をベースにしているので、
「なぜその構成にするのか」という背景も含めて解説します。
やりたいこと
- 開発環境・テスト環境のEC2を業務時間外に自動停止
- 例: 平日 9:00〜17:45 のみ起動、それ以外の時間は自動停止
コスト削減 + 運用負荷軽減が目的です。
実装方法は2通りある
| 方法 | 概要 | 向いているケース |
|---|---|---|
| 方法① | EventBridge SchedulerからEC2APIを直接実行 | 少数台・検証用途 |
| 方法② | EventBridge Rule + SSM Automation | チーム運用・拡張前提 |
方法① EventBridge Scheduler + EC2StopInstances API
構成イメージ
EventBridge Scheduler
↓(指定時刻)
EC2StopInstances API
↓
EC2停止
なぜ EventBridge Scheduler を使うのか
EventBridge Schedulerは「スケジュール実行」に特化したサービスです。
- cron / rate / at に対応
- ローカルタイムゾーン指定可能
- サマータイム(DST)対応
- 単発実行も可能
従来の EventBridge Ruleより、時間指定だけをしたいケースでは非常に使いやすいのが特徴です。

こちらが構成図です。
特定の時間にEventBridge Schedulerを起動し、直接StopInstancesという
EC2を停止するAPIを実行して、EC2を停止します。
基本手順(概要)
- EC2インスタンスを作成
- EventBridge Schedulerを作成
- ターゲットに EC2の
StopInstancesAPIを指定 - Scheduler用のIAM ロールを作成・紐付け
- 指定時刻にEC2が停止することを確認
この方法のメリット・デメリット
メリット
- 構成がシンプル
- 設定が少なく、すぐ試せる
- IAMも最小限で構成可能
デメリット
- 停止対象をインスタンスIDで直接指定
- 台数が増えると、管理が煩雑
- また、設定ミスが起きやすい
方法② EventBridge Rule + Systems Manager Automation
なぜ Systems Manager Automationを使うのか
方法①の課題を解決するのが
Systems Manager(SSM)Automationです。
特徴として、インスタンスIDではなく「タグ」でEC2を管理する点があります。

こちらが構成図です。

こちらは先ほどの構成図のSystem Manager Automationの部分を少し詳細に記載しています。
今回のケースでは、EventBridge Ruleがパラメータとして、タグの値を受け渡します。
タグというのは、AWSリソースを整理するためのキーと値のペアのことで、AWSリソースに対して関連付けることができます。
今回は、停止するEC2に特定のタグを追加して、パラメータとして受け取ったタグが追加されているEC2を停止します。
タグは、単体でもリソースを検索したり、フィルタリングしたりすることができます。
構成イメージ
EventBridge Rule(スケジュール)
↓
SSM Automation実行
↓
タグ条件に一致するEC2を検索
↓
EC2停止
Systems Manager Automationとは?
- AWSリソースの運用作業を自動化する仕組み
- 「Automation ドキュメント」と呼ばれる手順書を実行する
今回使うポイント
- EC2の停止処理はAWS公式ドキュメント
AWS-StopEC2Instance
- 自分で停止処理を実装する必要はない
安全で再利用しやすいのが特徴です。
タグベース運用の例
EC2につけるタグ
| Key | Value |
|---|---|
EC2Stop-example |
test |
Automation の動き
- 指定されたタグを持つEC2を検索
- 該当するEC2をすべて停止
EC2が増えても、タグを付けるだけで自動停止対象にすることができます。
必要な設定(概要)
- SSM Automationドキュメントを作成(YAML)
- EventBridge Ruleを作成(スケジュール)
- IAM ロールに以下の権限を追加
ssm:StartAutomationExecutiontag:GetResources
- EC2にタグを付与
- 動作確認
ドキュメントは以下を参考に指定ください。
schemaVersion: '0.3'
description: 'StopEC2Instances Using Tags:EC2Stop-example'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
EC2Stop-example:
type: String
default: test
description: '(Required) test, product'
allowedValues:
- test
- product
AutomationAssumeRole:
type: String
description: (Optional) The ARN of the role that allows Automation to perform the actions on your behalf.
default: ''
mainSteps:
- name: StopEC2Instances
action: 'aws:executeAwsApi'
inputs:
Service: ssm
Api: StartAutomationExecution
DocumentName: AWS-StopEC2Instance
TargetParameterName: InstanceId
Targets:
- Key: 'tag:EC2Stop-example'
Values:
- '{{ EC2Stop-example }}'
Systems Manager Automationを使うメリット
1. 管理が圧倒的に楽
- タグで停止対象を一覧化できる
- 「どのEC2が止まるのか」が一目で分かる
2. ヒューマンエラーが減る
- インスタンスIDのコピペが不要
- 設定変更はタグ付けだけでOK
3. 再利用・横展開しやすい
- ドキュメントのバージョン管理が可能
- ドキュメントの他アカウントへ共有が可能
- 開発環境 → 検証環境 → テスト環境に横展開しやすい
4. チーム・組織運用に向いている
- 「誰が設定したか分からないScheduler」
- 「インスタンスID直書き」
といった属人化を防げる
EventBridge SchedulerとRuleの使い分け
| 観点 | Scheduler | Rule |
|---|---|---|
| 対象数 | 1対1 | 1対多 |
| タイムゾーン | ローカル可 | UTCのみ |
| 単発実行 | 可 | 不可 |
| 運用自動化 | △ | ◎ |
まとめ
今回は以下の2通りの方法でEC2の自動停止を行ってみました。
- EventBridge Schedulerを使ったシンプルな方法
- Systems Manager Automationを使った運用向きの方法
AWSでは、最初はシンプルに作り、運用フェーズで自動化・標準化する、という流れがよくあります。
今回のEC2自動停止は、その考え方を学ぶのにちょうどいい題材だと思います。
この記事がどなたかの参考になれば幸いです!