🏷️

【AWS】インスタンスID管理はもうやめる。タグを付けるだけでEC2を一括自動停止する(SSM State Manager)

に公開
2026/02/15

はじめに

前回、EventBridge Schedulerを使って特定のEC2インスタンスを自動停止する方法を紹介しました。👉【AWS】サーバーレスでEC2自動起動・停止!EventBridge × SSM で無駄なコストを抑えよう!
しかし、運用を続けていくと新たな課題が出てきます。

「新しい検証用EC2を作るたびに、Schedulerの設定にインスタンスIDを追加するのが面倒くさい…」

人間なので、IDの追加忘れは必ず起こります。そしてまた課金が発生します。
そこで今回は、「特定のタグが付いているインスタンスは問答無用で停止する」という、より管理が楽な仕組みをSSM State Managerを使って構築します。

今回のアーキテクチャ

AWS Systems Manager (SSM) の機能の一つである State Manager(ステートマネージャー) を使用します。

  • ターゲット: タグキー AutoStop、値 true が付いている全インスタンス
  • ドキュメント: AWS-StopEC2Instance
  • スケジュール: 毎日 20:00 (JST)

これにより、今後EC2を作成する際は、タグに AutoStop: true を付与するだけで、自動停止の対象になります。Schedulerの設定変更は一切不要です。

1. IAMロールの準備

State ManagerがEC2を停止するために必要なIAMロールを作成します。
(基本的には前回の記事で作成した Execution Role とほぼ同じ権限でOKですが、信頼関係の対象が少し異なります)

信頼ポリシー (Trust Policy):
SSMがこのロールを使用できるようにします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "ssm.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

許可ポリシー (Permissions):
ec2:StopInstances と ec2:DescribeInstanceStatus を許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StopInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}

※ Resource は * にしています。タグで絞り込むため、特定のIDに縛られないようにします。

2. State Manager (関連付け) の作成

AWSマネジメントコンソールから設定します。

  1. Systems Manager > ステートマネージャー > 関連付けの作成 をクリック。
  2. 名前: Stop-EC2-by-Tag など分かりやすい名前を入力。
  3. ドキュメント: AWS-StopEC2Instance を選択。
  4. パラメータ:
  • InstanceId: (空欄のままでOK)
  • AutomationAssumeRole: 作成したIAMロールのARNを入力。
  1. ターゲット:
  • タグを指定 を選択。
  • タグキー: AutoStop
  • タグ値: true
  1. スケジュール:
  • CRON式 を選択。
  • cron(0 11 * * ? *) (毎日UTC 11:00 = JST 20:00)
  • ※ JSTで指定したい場合はEventBridgeのCron式とは少し書き方が違うので注意(SSMはUTC基準が基本です)。

3. 動作確認

実際にEC2インスタンスを2台用意して検証します。

  • Instance A: タグ AutoStop: true を付与。
  • Instance B: タグなし。

指定した時間(または「今すぐ適用」を実行)になると…

  • Instance A → 停止 (Stopped)
  • Instance B → 稼働中 (Running)

これで、「タグさえ付けておけば勝手に止まる」環境が完成しました!

まとめ

EventBridge Schedulerは「特定の重要リソース」を細かく管理するのに向いていますが、開発環境のような「数が増減しやすいリソース」には、今回のような**タグベースの管理(SSM State Manager)**が便利かなと個人的に思っています。

運用のフェーズや目的に合わせて、これら2つの自動化手法を使い分けていきましょう。

Discussion