この記事では、EventBridgeを用いて、EC2インスタンスを指定した時間や日付、曜日に起動または終了する方法を紹介します。
はじめに
この記事では、EventBridgeを用いて、EC2インスタンスを指定した時間や日付、曜日に起動または終了する方法を紹介します。
Amazon EC2とは
Amazon EC2(Elastic Compute Cloud)はAmazon Web Service(AWS)で利用できるIaaSです。
AWS EC2に関する関連記事は以下になりますので、目的に合わせてご参照いただければと思います。
Amazon EC2とは何か?
Amazon EC2(以下、EC2)についての詳細は以下の記事を参照ください。
EC2の起動・接続方法
EC2の起動と接続方法については以下の記事を参照ください。
EC2インスタンス作成後の操作(起動・削除・再起動)
EC2インスタンス作成後のインスタンスの操作については、以下の記事を参照ください。
EC2インスタンスのグローバルIP固定方法
EC2インスタンスのグローバルIPを固定する方法については、以下の記事を参照ください。
EC2を指定した時間で起動や終了する
EC2は使った分だけ課金なので、デバッグや試験で一時的にサーバを起動するということがよくあると思います。
都度、起動や終了動作をさせたいインスタンスに対してコンソール画面から行えばよいですが、例えば仕事で使う場合など、毎日起動終了させるのが面倒などといったことはよくあると思います。また、平日は起動しっぱなしでよいが、休日は止めたいなどの需要もあると思います。
そこで、今回はEC2インスタンスを特定の時間に起動し、特定の時間に終了するという動作をできるように設定を行います。
EC2のコンソール画面でできること
EC2の統合設定画面または、インスタンス詳細画面では、各インスタンスの起動や終了を行うことはできますが、指定した時間にそのような動作を行わせることができません。
そこでAWSで利用できる別のサービスを利用して、EC2インスタンスを指定時間に起動終了できるようにします。
具体的には、Amazon EventBridgeを利用します。
Amazon EventBridgeについて
Amazon EventBridge(以下、EventBridge)はAWSのイベントバスサービスで、異なるシステム間でのイベントの受け渡しや処理を簡素化しすることができるサービスです。詳細については以下の記事で紹介しています。
今回はこのEventBridgeを用いて、EC2インスタンスの起動終了を制御します。
設定の流れ
今回の設定は、以下の大まかな枠組みに沿って行います。
- IAMロールの設定
- EventBridgeの設定
以降は、上記の流れに従って設定します。
IAMロールの設定
EventBridgeを用いてEC2を操作するので、EventBridgeとEC2をそれぞれ操作できる権限が必要です。
EventBridgeの設定内にどのロールを使用するかの項目があり、その場で作成できないため、あらかじめロールを設定しておきます。
IAMについての概要は以下の記事を参照ください。
今回設定するロールには以下を設定します。
- EC2インスタンスのSTART、STOPができるポリシー設定
- EventBridgeからこのロールを使うことができるように設定する
ロールの作成
AWSのコンソールの画面上の「検索」から「IAM」を入力し、「IAM」をクリックします。

画面左側の「アクセス管理」から「ロール」をクリックします。

画面右上の「ロールを作成」をクリックします。

信頼されたエンティティタイプを「AWSのサービス」として、ユースケースを「一般的なユースケース」の「EC2」を選択し、「次へ」をクリックします。

権限の設定
許可ポリシーの検索画面に「ec2full」と入力し検索します。
「AmazonEC2FullAccess」と出るので、そのポリシーにチェックをつけ、「次へ」をクリックします。
※今回はEC2のフルアクセス権限を付与していますが、適用するポリシーは最小限にするべきなので、本来は起動と終了だけ付与すればよいです。

ロール名の設定
ロール名を設定します。
今回はEC2の自動起動終了用のロールなので、「ec2_start_stop」という名前にします。
説明は何でもいいですが、日本語を使えないので、「Roles to start or stop EC2 at specified times」としました(DeepL翻訳を用いて)。

DeepLの詳細については以下の記事で紹介しています。
「ステップ1:信頼されたエンティティ」と「ステップ2:許可を追加する」はそのままにして、「ロールを作成」ボタンをクリックします。

信頼ポリシーの設定
ロールの管理画面に戻ってくるので、作成したロールをクリックします。

「信頼関係」タブを選択し、「信頼ポリシーを編集」をクリックします。

「Statement」「Principal」「Services」欄の値が「ec2.amazonaws.com」となっていると思いますが、それを「scheduler.amazonaws.com」に変更し、「ポリシーを更新」をクリックします。

ここで設定したポリシーをEventBridgeの設定で使用します。
EventBridgeの設定
続いて、Amazon EventBridgeの設定を行います。
スケジュールの作成
AWSのコンソールの画面上の「検索」から「eventbridge」を入力し、「Amazon EventBridge」をクリックします。

画面左側の「Scheduler」の「スケジュール」をクリックします。

画面右下の「スケジュールを作成」をクリックします。

スケジュール名の設定
スケジュール名を決めます。今回は「ec2_start」または「ec2_stop」とします。
※今回は、起動のスケジュールと終了のスケジュールをそれぞれ1つずつ合計2つ作る必要があります。
説明は入れたい場合は入力します。スケジュールグループは特に決めていなければ「default」でよいです。

スケジュールのパターンを設定
スケジュールのパターンは毎日指定時間に行いたいので、「定期的なスケジュール」「cronベースのスケジュール」を選択します。
cron式を入力します。毎日7時だと画像のように設定します。cron式を入力すると、10回分の次回起動時間が表示されるので、そこで意図したスケジュールになっているか確認します。
フレックスタイムウィンドウは指定時刻に幅を持たせたいときは入力しますが、cronで指定した時刻きっちりの場合は「オフ」を選択します。

時間枠
時間枠は起動したいタイムゾーンを選択します。開始日時と終了日時は、開始または終了の期間設定があれば設定します。永遠に行う場合は設定不要です。

設定を入力したら「次へ」をクリックします。
ターゲットの選択
ターゲットの詳細では「すべてのAPI」を選択し、サービスに「ec2」を入力して検索し、「Amazon EC2」を選択します。

EC2の自動起動設定する場合は「start」と入力し検索し、「StartInstances」を選択します。

自動停止設定をする場合は「stop」と入力して検索し、「StopInstances」を選択します。

入力欄の「”MyData”」欄に操作したいEC2インスタンス名前を入れ、「次へ」をクリックします。

※EC2インスタンス名とは、「EC2」→「インスタンス」に表示される「インスタンスID」のことです。
その他設定~スケジュール作成

スケジュールを有効化するときは、有効化を選択し、後で自分で設定する場合は有効化のトグルをOFFにします。
再試行ポリシーとデッドレターキュー(DLQ)については、失敗したときに再試行するかどうかとその際にAmazon SQSキューに積むかを設定します。
今回は動作に失敗したら失敗したで別に問題ないので、OFFにして、デッドレターキューも「なし」にします。
暗号化は記載の通りデフォルトでも保存転送どちらでも行われるので、社内やサービスの規定などで制約がある場合は設定します。

アクセス許可には、「既存のロール」しか選択できないです。
今回は先ほど作成した「ec2_start_stop」のロールを選択し、「次へ」をクリックします。

設定内容を確認し、「スケジュールを作成」をクリックします。

スケジュール作成中となり、そのうち作成されます。

EC2の起動と終了それぞれを設定する場合は、同じ手順でもう一方のスケジュールを作成します。
作成時のエラーについて
「スケジュールを作成」ボタンをクリックした際、
scheduler the execution role you provide must allow aws eventbridge scheduler to assume the role.
と出てしまいスケジュールが登録できないことがありました。
これは利用しようとしているIAMロールの設定が誤っているときに出ます。
IAMロール内の信頼関係のServices欄で「scheduler.amazonaws.com」を指定していない(EventBridgeからの操作を許可していない)可能性が高いです。
したがって、上記IAM設定項目を参考に、「scheduler.amazonaws.com」を指定してください。

動作テスト
EventBridgeを作成したら正しく動作するかテストします。
とは言っても、1回だけテスト実行するなどの機能はないので、スケジューラから起動する時間を現時刻の直近に変更してイベントが起動するようにします。
「Amazon EventBridge」→「スケジューラ」→「スケジュール」から動作確認したいスケジューラ名を選択します。

画面右上の「編集」をクリックします。

「スケジュールのパターン」のcron式を現時刻の直近に変更します。

画面下のほうにスクロールし「スケジュールの確認と保存にスキップ」をクリックします。

画面をスクロールし、「スケジュールを保存」をクリックします。

「スケジュールhogeが正常に保存されました」と出ることを確認します。

実際にスケジューラが起動したかどうかについては、操作するEC2インスタンスの状態を確認するのが簡単ですが、他の確認方法として今回はCloudTrailで確認します。CloudTrailでの動作確認方法は次章で解説します。
CloudTrailの機能や役割は以下の記事を参照ください。
CloudTrailで動作確認
AWSコンソールの上側で「cloudtrail」と検索し、AWS CloudTrailをクリックします。

画面左側の「イベント履歴」をクリックします。

「イベント時間」で操作された時間を確認し、「イベント名」が操作されたスケジューラと一致するか確認し、項目をクリックします。
今回はEC2インスタンスを停止したので、「StopInstances」をクリックします。

「詳細」欄に詳しい情報が載っていますので、確認します。エラーコード等が出ていなければ問題ないです。

EventBridgeの設定を元に戻す
正しくイベントが動作していることを確認したので、EventBridgeで一時的に変更した時刻を本来の設定時刻に戻します。
EventBridgeの料金について
今回の設定の場合、「EventBridgeスケジューラ」に該当します。
EventBridgeスケジューラはひと月に1400万回まで無料で利用できます。
仮に1秒に1回、EventBridgeスケジューラ登録している場合は、ひと月で2,678,400回となります。
そのため1400万回無料で使えるのがすごいことが分かります。
他にもEvnetBridgeで管理する種類により料金は変わるため、詳細は公式ページを参考にしてください。
まとめ
EC2を指定時間に起動終了するための方法として、EventBridgeを利用する方法を画像付きで紹介しました。
EC2起動を自動化させたい、指定時間に起動したいという方は、是非参考にしていただければと思います。
AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解)
コメント