3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】EventBridgeスケジューラーを駆使して日々の料金を抑えよう!

3
Last updated at Posted at 2025-12-17

はじめに

ITの業界に飛び込んで、常駐先で勤務を始めて早二年。。。
保守の観点から月次に各サービスの稼働時間・請求料金を算出していますが、まあ高い!!
今や円安の影響で、1USD=155円(2025年12月1日現在)。
去年の1000USDと今年の1000USDでは全然違います。
なによりこんな大金毎月使ってると思うと精神的に辛い。。。。
そこで!抑えられる費用は極力抑えよう!そんなお話です。

例えば・・・

みなさん、AWSを使っていてこんなことはないだろうか?
上司から
「新規環境作りたいから検証してくれないか」
あなた
「検証して報告しますね」
日々あなたは検証を行って、月次稼働料金を計算したとき。
「あれ?なんか先月高くない??」
・・・・・・
「あ!EC2・RDSインスタンス起動したままだ。。。」

そんな時、EventBridgeなら防げます。

EventBridgeスケジューラとは

まず、EventBridgeってどんなもの?って話ですが、AWS公式には以下のように記載されています。

AWS公式
EventBridge スケジューラは1つの中央マネージドサービスからタスクを作成実行管理できるサーバーレススケジューラです

引用元:AWS公式-EventBridge-
つまりはどういうことか???
簡単に言えば、「登録した日時に特定の操作をさせるためのもの」と覚えていただければわかりやすいかと思います。
↓公式のサービス図でいうとここ↓
画像111.png

本題

前置きが長くなりましたが、今回の本題!
「検証のために構築したEC2インスタンスを毎日22:00に停止させよう」
です!

作業に必要な情報

・対象EC2インスタンスのインスタンスID
 インスタンスIDは、EC2インスタンスから確認できi-xxxxxとなります。
・使用する AWS アカウントのリージョン
 今回は東京リージョン(ap-northeast-1)とします。
・EventBridge Scheduler が EC2 を停止させるための IAM ロール
 EC2 API を実行するための 信頼ポリシーと権限 を持つロールが必要なので作成します。

実際に構成してみよう

①対象のEC2インスタンスのインスタンスIDを確認
AWSマネージメントコンソール ⇒ EC2 ⇒ インスタンスの一覧の画面に進み、あらかじめ作成しておいた対象のEC2インスタンスのインスタンスIDを確認します。
画像1.png
確認箇所は、赤枠の個所で確認できます。

対象インスタンスID
i-01429b74bcb2c17fc

②IAMロールを作成
EventBridge Scheduler が EC2 を停止するには、StopInstances を実行できる IAM ロール が必要になります。
画像1.png
AWSマネージメントコンソール ⇒ IAM ⇒ ロールの画面に進み、「ロールを作成」を選択します。

画像2.png
カスタム信頼ポリシーを選択。

画像3.png

カスタム信頼ポリシーは、以下のJSONを打ち込みます。

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

問題なければ「次へ」を選択します。

画像4.png

許可を選択はそのまま「次へ」を選択します。
画像5.png
自分で覚えやすい「ロール名」「説明」を記入します。
※ここは特に決まりはないので、覚えやすいものでいいです。
画像6.png
最後に、「ロールの作成」を選択します。

③EventBridgeスケジューラの設定
いよいよ対象のEC2インスタンスを停止させるスケジュールを作成します。
画像7.png
AWSマネージメントコンソール ⇒ Eventbridge ⇒ スケジュールの画面に進み、「スケジュールを作成」を選択します。
画像9.png
IAMロールと同じように「スケジュール名」「説明」は、自分が覚えやすい名前を記入し、「スケジュールグループ」はdefaultを選択します。
画像10.png
・頻度:定期的なスケジュール
・タイムゾーン:Asia/Tokyo
・cron式は以下に設定します。

cron
*22**?*

・フレックスタイムウィンドウ:オフ

画像11.png
時間枠は何も設定せず「次へ」を選択します。

画像12.png
・ターゲットAPI:すべてのAPI
・検索枠でEC2と入力
Amazon EC2を選択します。

画像13.png
・検索枠でstopと入力
StopInstanceを選択します。

画像14.png
入力欄に以下のJSONを入力し、「次へ」を選択します。

cron
#見本
{
  "InstanceIds": [
    "対象のEC2インスタンスID"
  ]
}

#今回のインスタンスIDであれば
{
  "InstanceIds": [
    "i-01429b74bcb2c17fc"
  ]
}

画像15.png
・スケジュールの状態:有効化
・スケジュール完了後のアクション:NONE
・再試行ポリシーとデッドレターキュー (DLQ):そのまま
・暗号化:そのまま
画像16.png
・実行ロール:既存のロールを使用
・既存の役ロールを選択:②で作成したIAMロールを選択
問題なければ「次へ」を選択します。

最終確認を行い、「スケジュールを作成」を選択します。

画像17.png
ステータスが「有効」になっていれば作成は完了です。

まとめ

いかがだったでしょうか。
インスタンスタイプによっては、そもそもスケジューラに設定しなくても元が安価なインスタンスもありますが、それが1台2台3台と増えれば雪だるま式に料金は増えていきます。
個人で練習用アカウントを運用している方であれば、これをしておかないと月末に目も当てられないような料金になっていることを考えれば、効果は大きいと思います。

以上!技術と節約術を兼ね備えた素晴らしいエンジニアになりましょう!

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?