Amazon EventBridgeスケジューラでEC2インスタンスの定期起動/停止を実施してみる


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

プロジェクトで稼働しているEC2インスタンスの中には常時稼働している必要のないものがある場合があります。

 

例を挙げると、月末だけで稼働していればよかったり、日中の9:00~17:00だけ稼働していればよかったりする場合です。

 

インスタンスタイプにもよりますが、必要最低限の稼働時間を実現することでコストを抑えられるかもしれません。

 

今回の記事では、Amazon EventBridgeスケジューラを利用してEC2インスタンスを指定した時間に起動・停止する方法を紹介します。

 

 

EC2インスタンスの定期起動/停止をスケジュールしてみる

わたしは以前、指定した時間にEC2インスタンスを停止する仕組みをAmazon EventBridgeとAWS Lambdaを使って実現する記事を書きました。

 

Amazon EventBridgeスケジューラが登場したので、Amazon EventBridgeスケジューラを利用して、スケジュールを作成し、定期開始・停止する構築を実施してみます。

 

 

■Amazon EventBridge Schedulerとは

今回の構築のキモである"Amazon EventBridge Scheduler"とはどんなサービスなのでしょうか。

 

Amazon EventBridge Scheduler は、一元化されたマネージドサービスからタスクを作成、実行、管理できるサーバーレススケジューラーです。 EventBridge スケーラブルなスケジューラーでは、AWS 270を超えるサービスと6,000を超えるAPI操作を呼び出すことができる何百万ものタスクをスケジュールできます。

EventBridge Schedulerを使用すると、インフラストラクチャをプロビジョニングして管理したり、複数のサービスと統合したりすることなく、スケジュールを大規模に配信し、メンテナンスコストを削減できます。(AWS公式ドキュメント)より

 

Amazon EventBridge Schedulerの強みは指定した時間に任意のAPI実施スケジュールを、コンソール画面だけで作成できることですよね。

 

コードを書く必要がないので、AWS初心者にとっても簡単に作業の自動化が実現できます。

 

 

■構築の流れ

今回利用するAWSサービスと作成の流れは以下の通りです。

 

IAMポリシー作成

IAMロール作成

Amazon EventBridgeスケジュール作成

動作確認

 

利用するサービスが少ないですね。

 

 

■IAMポリシー作成

はじめにIAMポリシーを作成します。Amazon EventBridgeがわたしたちに代わってEC2インスタンスを開始・停止するための権限ポリシーですね。

 

 

↓検索ウィンドウで[IAM]と検索し、Identity and Access Management (IAM)ダッシュボード画面に行きます。

 

ec2-stopstart-schedulesIAMポリシー作成

 

↓左のナビゲーションペインから[ポリシー]をクリックし、[ポリシー作成]を押します。

 

ec2-stopstart-schedulesIAMポリシー作成

 

↓[JSON]タブをクリックし、以下のドキュメントを貼り付けましょう。[AmazonEC2FullAccess]を利用してもいいのですが、EC2インスタンスの起動と停止しか実施しないので権限を制限しました。

 

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

 

ec2-stopstart-schedulesIAMポリシー作成

 

↓貼り付けが完了しましたら、[次のステップ:タグ]を押します。タグは任意で設定し、[次のステップ: 確認]をクリックします。

 

ec2-stopstart-schedulesIAMポリシー作成

 

↓[名前]を入力し、内容に問題がなければ[ポリシーの作成]を押します。例)名前:saitou-ec2-stopstart-schedules-policy

 

ec2-stopstart-schedulesIAMポリシー作成

 

IAMポリシーの作成は以上です。

 

 

■IAMロール作成

次にIAMロールを作成します。

 

 

↓Identity and Access Management(IAM)ダッシュボード画面で、左のナビゲーションペインから[ロール]をクリックし、[ロールを作成]を押します。

 

ec2-stopstart-schedulesIAMロール作成

 

↓[信頼されたエンティティタイプ]で[カスタム信頼ポリシー]を選択し、以下のドキュメントを貼り付けます。

 

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

 

ec2-stopstart-schedulesIAMロール作成

 

↓貼り付けが完了したら[次へ]をクリックします。フィルタウィンドウではじめに作成したIAMポリシー名を入力し、チェックボックスに☑を入れます。[次へ]をクリックします。

 

ec2-stopstart-schedulesIAMロール作成

 

↓ロール名を入力し、内容に問題がなければ[ロールを作成]をクリックします。
例)ロール名:saitou-ec2-stopstart-schedules-role

 

ec2-stopstart-schedulesIAMロール作成

 

IAMロールの作成は以上です。

 

 

■Amazon EventBridgeスケジュール作成

Amazon EventBridgeスケジューラでEC2を開始するスケジュールを作成します。

 

設定値は以下の通りです。

 

項目 設定値
スケジュール名 saitou-ec2-start-schedules
説明 任意
スケジュールグループ default
頻度 定期的なスケジュール
スケジュールの種類 cron ベースのスケジュール
cron式 20 9 ? *
フレックスタイムウィンドウ オフ

 

 

↓サービス検索ウィンドウで[Amazon EventBridge]と検索し、[Amazon EventBridge Scheduler]をクリックします。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓スケジュール名を入力します。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓スケジュールパターンを選択し、cron式を定義します。cron式の例は以下の通りです。cronについてさらに知りたい方はAmazon公式ドキュメントをご確認ください。

 

状況
毎日午前 10:15 (UTC) cron(15 10 * * ? *)
毎週月曜日から金曜日まで午後 6:00 cron(0 18 ? * MON-FRI *)
毎月 1 日の午前 8:00 cron(0 8 1 * ? *)
平日の 10 分ごと cron(0/10 * ? * MON-FRI *)
月曜日から金曜日まで午前 8:00 から午後 5:55 まで 5 分ごと cron(0/5 8-17 ? * MON-FRI *)
毎月最初の月曜日の午前 9 時 cron(0 9 ? * 2#1 *)

 

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓入植が完了したら、[次へ]をクリックします。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓[ターゲットAPI]は[すべてのAPI]を選択肢、[EC2]をフィルタリングします。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓[Amazon EC2]から[StrtInstances]を選択します。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓[入力]欄の[InastanceIds]に起動したいEC2インスタンスのIDを入力します。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓[スケジュールを有効化]は任意で[有効化]のトグルをオンにしてください。スケジュールを用意するだけの場合はトグルをオフにしておきましょう。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓[アクセス許可]で[既存のロールを使用]を選択し、用意したIAMロールを選択しましょう。選択したら、[次へ]をクリックしてください。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

↓内容に問題がなければ、[スケジュールを作成]を押します。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

 

EC2インスタンスを開始するスケジュールを作成しました。続いて、EC2インスタンスを停止するスケジュールを作成します。

 

構築手順自体はほぼ一緒なので、違う部分のみ紹介していきます。

 

 

↓Amazon EventBridgeスケジューラで[スケジュールを作成]をクリックします。

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓[スケジュール名]を入力します。
例)スケジュール名:saitou-ec2-stop-schedules

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓cron式を定義します。任意の時間を設定してください。わたしは開始時間の10分後に停止するよう設定しました。
例)cron:30 9 ? *

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓[ターゲットの詳細]で[Amazon EC2]から[StopInstances]を選択します。

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓[入力]で停止したいEC2インスタンスIDを入力します。

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓使用するIAMロールは開始の時と同じIAMロールを使用します。

 

ec2-stopstart-schedulesEventBridge停止スケジュール作成

 

↓内容に問題なければ、[スケジュールの作成]をクリックします。

 

ec2-stopstart-schedulesEventBridgeスケジュール作成

 

 

EC2インスタンスを開始・停止するスケジュールの作成は以上です。

 

 

■動作確認

今回の構築では該当のEC2インスタンスを[毎日9:20に開始]し、[毎日9:30に停止]するスケジュールを作成しました。

 

事前にEC2インスタンスを用意し、停止しておきました。9:20になったので見てみると、

 

ec2-stopstart-schedules動作確認

 

開始が確認できました。CloudTrailを見てみると、

 

ec2-stopstart-schedules動作確認

ec2-stopstart-schedules動作確認

 

EC2を開始するAPIが記録されていますね。

 

 

つぎに、9:30になったのでEC2インスタンスを見てみると、

 

ec2-stopstart-schedules動作確認

 

停止が確認できました。CloudTrailを見てみると、

 

ec2-stopstart-schedules動作確認

ec2-stopstart-schedules動作確認

 

EC2インスタンスを停止するイベントが記録されています。任意の時間でEC2インスタンスの開始と停止が確認できました。

 

 

今回の構築は以上です。

 

 

まとめ:Amazon EventBridgeスケジューラでEC2インスタンスの定期開始/停止を実施してみる

Amazon EventBridgeを利用すると、普段の作業の自動化に役立ち、かつコスト削減にもつながります。

 

以前はAmazon EventBridgeルールを利用して今回の仕組みを実現していましたが、Amazon EventBridgeスケジューラのリリースによってさらに簡単に自動化が実現できるようになりました。

 

ぜひ試してみてください。

 

 

参考リンク:AWS公式ドキュメント

 

 

↓ほかの協栄情報メンバーもAWS Lambdaに関する記事を公開しています。ぜひ参考にしてみてください。

 

■Amazon EventBridgeでセキュリティグループの変更を検知してみる(齊藤弘樹)
https://cloud5.jp/saitou-securitygroup-change-notification/

 

■EventBridgeとLambdaを使用してRDS自動停止を作成する(watanabe.r)
https://cloud5.jp/autostop-rds/

 

■RDS起動をEventBridgeで検知してLambdaで停止する構築ハンズオン(INAMURA)
https://cloud5.jp/rds-eventbridge-by-lambda-stopping/

 

Last modified: 2023-04-16

Author