1. ホーム
  2. 記事一覧
  3. Amazon EventBridge Schedulerを使ってEC2インスタンスを操作してみる

2023.09.08

Amazon EventBridge Schedulerを使ってEC2インスタンスを操作してみる

    こちらの記事では、AWSが展開するサービスの一つであるAmazon EventBridge Schedulerについて解説します。

    Amazon EventBridge Schedulerを使うメリット、Amazon EventBridgeとはどのような違いがあるのかについてまとめ、最後の章ではEC2インスタンスを起動、停止させるスケジュールを作成し実行しています。

    Amazon EventBridge Schedulerとは

    Amazon EventBridge Schedulerとは、2022年11月にAmazon EventBridgeに追加された機能で、一元的にタスクを作成、実行、管理できるサーバーレスのスケジューラーです。このサービスの大きな特長として、2023年8月の現時点で270以上のAWSサービスや6,000を超えるAPI操作を呼び出すことができます。

    また、特定の曜日や時間に定期的にタスクを実行したい場合にはcronやrate式を使用してスケジュールを作成できるほか、指定した時間内にイベントを一度だけ呼び出すことも可能です。さらに、イベントを発生させるための柔軟な時間帯の設定、再試行の制限設定、失敗したトリガーの最大保持時間を設定することもできます。

    What is Amazon EventBridge Scheduler?

    注意したい点として、現時点ではオンプレミスやAWS以外のターゲットについては直接サポートしていないため、AWS以外のターゲットを呼び出す際にはLambda、ECS、Fargateなどを使用しないといけません。

    Amazon EventBridge Schedulerを使うメリットとは?

    Amazon EventBridge Schedulerを使うメリットの一つとして、Amazon EventBridge Schedulerでスケジュールを作成すれば、直接EC2などのサービスを起動、停止などの制御をすることが可能になったことが挙げられます。

    従来のAmazon EventBridgeでEC2などのサービスを起動、停止するためには、EventBridgeとLambdaなどのサービスを組み合わせる必要がありました。

    この方法ではLambdaなどのサービスのコードの管理など、組み合わせるサービスに対して管理するコストが発生します。

    Amazon EventBridge SchedulerではEC2などのサービスに対して直接APIを呼び出せるようになったため、他のサービスに対しての維持、管理コストを削減できるようになりました。

    任意のタイムゾーンでタスクの実行時間を指定できる

    また、Amazon EventBridge Schedulerでは全てのタイムゾーンでタスクの実行時間が指定可能になったこともメリットの一つです。

    JTC(日本標準時)はUTC(協定世界時)よりも9時間進んでいます。従来のAmazon EventBridgeではUTC(協定世界時)ベースでスケジュールの実行時間を考える必要がありました。例として日本時間22時にスケジュールを実行したい場合、そのまま22時で設定するとUTCの22時、日本時間では午前7時にスケジュールが実行されてしまいます。

    EventBridgeで時間を設定した場合

    Amazon EventBridge Schedulerでは任意のタイムゾーンで指定できるようになったため、日本時間にも対応できるようになりました。そのため、タスクを作成する際に毎回実行される時間をUTCから逆算するという手間がなくなりました。

    EventBridge Schedulerで時間を設定した場合

    フレックスタイムウィンドウの使用で大量の処理を分散できる

    フレックスタイムウィンドウとは、指定した時間枠の中でタスクを実行できるという機能です。例えば、PM22:00〜22:30の時間枠を指定して、その中のあるタイミングで自動でタスクを実行できるということです。

    この機能を利用することで、ある一定の時間にタスクが集中して処理されることを避けることができ、サービス呼び出しの上限(クウォータ)に達してしまうことを避けることができます。また、時間枠だけを指定すれば自動でタスクを実行してくれるため、開発者側で綿密にタスクが実行される時間調整を行わなくて済むといったメリットもあります。

    一度限りのタスクが実行できる

    何かのイベントを受け取らなくても、定期的、一度限りのタスクがスケジュールによって実行できることもメリットの一つです。

    Amazon EventBridgeではイベントドリブンな処理が必要で、何かのイベントを受け取ったら指定した時間にタスクを実行する、といった設計が必要でした。

    Amazon EventBridge Schedulerではイベントを受け取らなくても、スケジュールを設定することで定期的または一回限りのタスクの実行が行えるため、サービスにアクセスされない時間帯を使用してデータの移行やメンテナンスなどを自動で行えるようになりました。

    EventBridge Schedulerの料金

    2023年8月現在、無料利用枠として月間1400万回の呼び出しが無料となっています。1400万回後の月のスケジュール起動回数が100万回あたり1.25US$(約183円)となっています。

    料金については時期によって変動がある可能性があるため、以下のリンクを参照ください。

    Amazon EventBridgeの料金

    Amazon EventBridgeについて

    Amazon EventBridgeは、AWSが提供するサーバーレスイベントバスサービスで、さまざまなアプリケーション間でのイベントの送受信を簡単にすることを目的として設計され、CloudWatch Eventsの後継として開発されました。CloudWatch Eventsの根本的な機能やサービスを引き継いで、パートナーイベント、Schema Registry、EventBridge Pipesなどの機能が追加されたものがAmazon EventBridgeです。

    EventBridgeのコアの機能には「イベントバス」が存在します。イベントバスは受け取ったイベントを、設定したルールに基づいてLambda関数やEC2インスタンス、SNSトピックなどのターゲットにルーティングする役割を果たします。また、EventBridgeはAWSのさまざまなサービスからのイベントを自動的に受け取ることができるため、S3バケットでのファイルの追加やDynamoDBテーブルのアイテム更新といったイベントをリアルタイムで捉えることが可能です。

    このように、Amazon EventBridgeでは何かイベントを受け取ったら処理を実行するといった、イベントドリブンなサービスが展開されています。

    What Is Amazon EventBridge?

    Amazon EventBridgeとAmazon EventBridge Schedulerの違い

    Amazon EventBridgeは何かのイベントを受け取り、システム間のデータをルーティングする目的で設計されています。

    対照的に、EventBridge Schedulerはスケジュールベースでイベントやタスクをトリガーすることに焦点を当てたサービスです。このサービスは、Amazon SQS、Amazon SNS、Lambda、EventBridgeなど複数のターゲットテンプレートを用意しているため、より簡単にスケジュールを作成することができます。さらに、ユニバーサルターゲットパラメータ (UTP) を活用すれば、270以上のAWSサービスや6,000以上のAPI操作をスケジュールに基づいてトリガーすることが可能です。

    Amazon EventBridge Schedulerのドキュメントでは、以下のように二つのサービスの違いが示されています。

    Amazon EventBridge SchedulerAmazon EventBridge rules
    スケジュール数に対する上限アカウントごとに100万までアカウント内のリージョンごとに300まで
    イベント呼び出し時の処理能力1,000TPS(Transactions Per Second)のスループットに対応可能スケジュール数のクォータにより、1 分単位のスケジュールを 300 個までしか作成できないため、スループットは最大でも 5TPS
    ターゲットAWS SDKを使用した270以上のサービスと6,000以上のAPI ActionsAmazon EventBridgeでサポートされる20以上のターゲット
    時間表現とタイムゾーンat()、cron()、rate()、全てのタイムゾーンとサマータイムcron(), rate(), タイムゾーンはUTCのみ
    一回限りのスケジュール指定可能指定不可能
    タイムウィンドウスケジュール(フレックスタイムウィンドウ)の指定指定可能指定不可能

    出典:Introducing Amazon EventBridge Schedulerより一部抜粋 https://aws.amazon.com/jp/blogs/compute/introducing-amazon-eventbridge-scheduler/

    Amazon EventBridge Schedulerを利用してEC2インスタンスを起動、停止してみる

    ここからは、Amazon EventBridge Schedulerで実際にスケジュールを作成し、EC2インスタンスの起動、停止を自動で行います。

    今回は以下の記事を参考に行いました。

    https://dev.classmethod.jp/articles/ec2-schedule-using-eventbridge-scheduler/

    前提条件

    スケジュールを作成する際にインスタンスIDを指定しなければならないため、あらかじめEC2インスタンスは作成してあります。

    Amazon EventBridge Scheduler用のIAMロールを作成する

    Amazon EventBridge Schedulerを使用する場合、IAMロールを作成する必要があるため、初めにIAMロールを作成します。IAMのダッシュボードからロールを選択します。

    次のページの右上にあるロールを作成をクリックします。

    信頼されたエンティティタイプから、「カスタム信頼ポリシー」を選択し、ポリシーの内容に以下の内容を追記します。

    "Principal": {
    		"Service": "scheduler.amazonaws.com" # ここを追記する
    },

    次へ進み、ポリシーを追加します。検索窓へec2と入力し、AmazonEC2FullAccessを選択します。

    ロール名は判別しやすい名前をつけ、ロールを作成します。

    ここまででAmazon EventBridge Schedulerに必要なIAMロールの作成は完了です。

    EC2インスタンスを起動させるスケジュールを作成する

    IAMロールを作成後、Amazon EventBridge Schedulerのコンソールへ移動します。

    左側のナビゲーションからスケジュールを選択し、「スケジュールを作成」をクリックします。

    わかりやすいスケジュール名を作成します。

    スケジュールは「定期的なスケジュール」を選択し、cronベースのスケジュールを作成しました。cronに値を入力すると、下に実行予定のスケジュールが表示されます。cronについては次の記事で詳しく解説しています。

    https://envader.plus/course/12/scenario/1131

    今回は毎日11時10分にインスタンスを起動するよう値を指定しました。

    次にどのサービスをターゲットにするかを選択します。テンプレートですでに用意されているものもありますが、EC2はテンプレートとして存在しないため「すべてのAPI」を選択。検索窓へ「ec2」と入力し「EC2」をクリックします。

    インスタンスをスタートさせるためのAPIを検索します。検索窓へ「start」と入力し、「StartInstances」をクリックします。

    インスタンスのIDを入力する画面が表示されるため、すでに作成してあるEC2インスタンスのIDを入力します。

    次のページでは、「アクセス許可」の項目までデフォルト値で進み、実行ロールをはじめに作成したIAMロールを選択しスケジュールの作成を完了させます。

    作成したスケジュールのターゲットを確認すると、指定したサービスやAPIが確認できます。ここまででEC2インスタンスを起動させるスケジュールの作成は完了です。

    EC2インスタンスを停止させるスケジュールを作成する

    EC2インスタンスを起動させる方法と同じ手順で、停止させるスケジュールを作成します。コンソールより、再度「スケジュールを作成」をクリックします。

    こちらでもわかりやすいスケジュール名を指定します。

    停止するスケジュールは以下のように、11時15分に設定しました。

    今回はインスタンスを停止させるAPIを呼び出すため、検索窓へ「stop」と入力し、「StopInstances」を選択します。

    停止させるインスタンスIDを入力します。

    以降は起動させる時と同様に進み、実行ロールを選択してスケジュールを作成します。

    指定時間に起動、停止が行われたかCloudTrailで確認する

    指定したスケジュールどおりに起動、停止が行われたかどうかはCloudTrailで確認できるため、CloudTrailのコンソールへ移動します。

    イベント履歴を見ると、起動、停止をスケジュールどおりに実行できていることが確認できました。

    まとめ

    Amazon EventBridge Schedulerの導入により、EventBridgeでのスケジュール作成が格段に柔軟になりました。特に、直接APIを利用できる機能やタイムゾーン指定が可能になったことは、開発者や運用者の作業効率を大いに向上させる要素となるでしょう。今回は利用しませんでしたが、フレックスタイムウィンドウや一度きりのタスク実行のような機能を駆使することで、以前よりも運用の効率が上がること間違いなしです。

    AWSを始め、クラウド技術は日々進化を続けています。この動きについて行くためにも、新しいサービスや機能を積極的に学んでいきたいですね。

    【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

    IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

    プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

    「フリーランスエンジニア」

    近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

    「成功する人とそうでない人の違いは何か?」

    私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

    比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

    多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

    note記事3000いいね超えの殿堂記事 今すぐ読む

    エンベーダー編集部

    エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

    RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

    関連記事