0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2を自動起動・停止させてみた

Last updated at Posted at 2025-07-21

はじめに

EC2をスケジュールに合わせて自動起動・停止させてみました。また、著者はコードを記述できないため、できるだけ簡単な方法で実装しました。

使うサービス

・EC2:起動・停止対象となる仮想サーバです。
・Systems Manager(以下、SSM):AWSが用意したEC2の起動・停止コマンドを実行します。
・EventBridge:スケジュールに合わせてSystems Managerを起動させます。

手順

(1) EC2インスタンスの準備

image.png

セキュリティグループではインバウンドルールでSSH、HTTPSを許可します。

image.png

(2) VPCエンドポイントの作成

image.png

SSMとの通信のため、以下のエンドポイントを作成します。
ネットワーク設定では、EC2インスタンスを設置したVPC、セキュリティグループを選択します。

・com.amazonaws.ap-northeast-1.ssm
・com.amazonaws.ap-northeast-1.ec2messages
・com.amazonaws.ap-northeast-1.ssmmessages

(3) EC2にアタッチするIAM ロールの作成

ロールの信頼ポリシーに以下を設定します。

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

(4) EC2にIAMロールをアタッチ

EC2から、アクション→セキュリティ→IAMロールを変更

image.png

作成したIAMロールを選択し、IAMロールをアタッチします。

image.png

(5) EventBridgeからSSMを呼び出すIAM ロールの作成

ロールの信頼ポリシーに以下を設定します。

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

SSM実行のみを許可する以下のIAMポリシーをアタッチします。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ssm:StartAutomationExecution",
      "Resource": [
        "arn:aws:ssm:ap-northeast-1::document/AWS-StartEC2Instance",
        "arn:aws:ssm:ap-northeast-1::document/AWS-StopEC2Instance"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:StartInstances",
        "ec2:StopInstances" ,
        "ec2:DescribeInstanceStatus",
        "ec2:DescribeInstances"
      ],
      "Resource": "arn:aws:ec2:ap-northeast-1:<account-id>:instance/<対象のインスタンスID>"
    }
  ]
}

(6) EventBridgeルール作成

月曜日から金曜日の9時に起動処理が実行されるようなルールを作成します。

image.png

image.png

起動用ルール:start-ec2-daily
スケジュールタイプ:スケジュール
cron 式:cron(0 0 ? * MON-FRI *)
ターゲットタイプ:SSM Automation
ドキュメント名:AWS-StartEC2Instance
InstanceId: 対象インスタンスIDを入力

月曜日から金曜日の18時に停止処理が実行されるようなルールを作成します。

image.png

image.png

停止用ルール:stop-ec2-daily
スケジュールタイプ:スケジュール
cron 式:croncron(0 9 ? * MON-FRI *)
ターゲットタイプ:SSM Automation
ドキュメント名:AWS-StopEC2Instance
InstanceId: 対象インスタンスIDを入力

(7) 設定最終確認

正しく設定が行われているか、以下を確認します。

1 SSMのノードツールから、EC2インスタンスが認識されていること。

image.png

※EC2作成後、IAMロールをあとからアタッチした場合、SSM Agentが再認証されないことがあります。その場合はEC2に接続し、以下のコマンドを実行してください。

sudo systemctl restart amazon-ssm-agent

または EC2 インスタンス自体を再起動してみてください。

それでも認識されない場合は以下を確認します。
①EC2インスタンスにアタッチしたIAMロールが正しいこと
②作成したVPCエンドポイントの設定が正しいこと
SSM Agentが別リージョンのSSMエンドポイントに誤って接続しているケースがあります。

(8) 自動起動・停止の実装確認

テスト用のEventBridgeルールを作成し、起動中のEC2インスタンスが停止することを確認します。
最速で実行されるように1分毎に停止処理が実行されるルールを作成しました。

image.png

しばらくするとEC2インスタンスの状態が停止済みとなっていることが確認できます。

image.png

まとめ

ノーコードでEC2インスタンスの自動起動・停止機能を実装できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?