【AWS】用語を整理しながら学ぶAmazon EventBridge Scheduler 

## この記事で伝えたいこと（ポイント）

- Amazon EventBridge Schedulerとは何かについて触れているよ
- Amazon EventBridge Schedulerを扱う上で必要な知識や関連技術に触れているよ
- EventBridge Schedulerを使うときはいろんな設定を入れる必要があるよ

## はじめに

この記事では 用語を整理しながらAWSが提供するAmazon EventBridge Scheduler （以下、本文ではEventBridge Scheduler）を学習していく内容になっています。主な内容としては実践したときのメモを中心に書きます。
（忘れやすいことなど）誤りなどがあれば書き直していく予定です。

## Amazon EventBridge Schedulerとは

では早速、EventBridge Schedulerとは何なのかについて見ていきましょう。
公式サイトでは次のように説明されています。

> スケジュールされたイベントとタスクを作成、トリガー、管理する

参考：[サーバーレスタスクスケジューラ – Amazon EventBridge スケジューラ – Amazon Web Services](https://aws.amazon.com/jp/eventbridge/scheduler/)

また、AWSの公式DocsによるとEventBridge Schedulerは次のように説明されています。

> Amazon EventBridge スケジューラはサーバーレススケジューラで、一元化されたマネージドサービスからタスクを作成、実行、管理できます。スケーラビリティに優れた EventBridge スケジューラを使用すると、270 を超える AWS サービスと 6,000 を超える API オペレーションを呼び出すことができる数百万のタスクをスケジュールできます。

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

参考：[Amazon EventBridge スケジューラとは - EventBridge スケジューラ](https://docs.aws.amazon.com/ja_jp/scheduler/latest/UserGuide/what-is-scheduler.html)

スケジュールされたイベント？タスクを作成？トリガー？
一元化されたマネージドサービス？？？
インフラストラクチャをプロビジョニングして管理したり、複数のサービスと統合したりすることなく？？？
Amazon EventBridge スケジューラはサーバーレススケジューラ？？？？？

何がなんだかわかりませんね。そもそもスケジュールとは何なのか。EventBridgeとは言うけどなんで「ブリッジ」なのか気になることが多すぎます。

## 前提：AWSにおけるEventBridge

AWSにおいてEventBridgeというのはつまり、クラウド上のイベントとAWSサービスを繋ぐサービスです。それこそ`架け橋`ということになります。

たとえば、イベント駆動で動作するサーバレスのコンピューティングサービスとしてAWS Lambdaがあります。
Lambdaはクラウド上のイベントをキャッチしたことをトリガー（きっかけ）に起動できます。このイベントをマネジメントするサービスがEventBridgeとなります。

なお、EventBridgeにはさまざまな機能が存在しており、今回紹介するのはその中でもスケジュールをベースで動作するEventBridgeです。

### 考察：なぜイベントを「ブリッジ」なのか

なぜ、EventConnectという名前ではないのか個人的に疑問があったので考察してみます。
すでに答えは出ているようなものですが、もう一つ補足しておきます

IT業界あるいは理工系の世界においては`ブリッジ`という言葉は`何かを繋ぐ`時に利用します。とりわけ、ネットワークエンジニアリングの世界では`ブリッジ接続`という言葉があります。

これは異なるネットワークを繋いで1つのネットワークであるかのように見せるものです。
※ルータだけどルータの役割を果たしていないブリッジルータというものを目にしたことがある人もいるでしょう。

他にも電気回路の分野においては`ブリッジ回路`というものもあります。これもある意味で繋いでいます。

EventBridgeはAWS上で起きたイベントとサービスを繋ぐから「ブリッジ」なのかもしれません。

`イベントがEventBridgeを渡ってサービスに移動する`という表現もできます。（橋だけに）
ここでポイントなのは`サービスと繋いでいるのはEventBridgeではなくイベントである`というところです。なお、厳密な由来はわからないので知っている人がいたら教えてください。

## 前提知識：スケジューラとは

スケジューラとは何なのか簡単に説明すると`時間通りに定期実行してくれる仕組み`と言えます。Windowsをお使いの方であれば、`タスクスケジューラ`というものをご存知かと思います。

参考：[開発者向けのタスク スケジューラ - Win32 apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/windows/win32/taskschd/task-scheduler-start-page)

Linuxユーザの場合は一番馴染みの深いものでcronが有名です。

スケジューラの特徴としては`いつに何を実行するのか`あるいは`どれくらいの頻度で実行するのか`というところを設定できるところです。自動化の強い味方です。

## EventBridge Schedulerの概要

前提知識を踏まえて考えるとEventBridge Schedulerは時刻や実行頻度をイベントソースにして動作するサービスです。

EventBridge Schedulerで重要になる概念としてはスケジュールパターンとSchedule groupがあります。

スケジュールパターンでは主に次の2つのパターンを設定できます。

- One-time schedule
    - 指定した時刻に1回だけ実行
- Recurring schedule
    - cron式
    - rateベース

Schedule groupは実行するスケジュールを束ねておけるものであり、デフォルトでは`default`という名前のSchedule groupがあります。スケジュールごとにグループを作成して管理することでアクセス制御とコスト配分で役に立ちます。

### cron式とか言われても覚えていない

ここまででグルーピングができてcronやrateベースで実行できることがわかりました。
rateベースの設定はさておき、「cronなんて覚えていないよ。」と思ったかもしれません。
（crontabで頑張って編集していたことを思い出すと胃が痛くなります。）

でも安心！EventBridge Schedulerでは画面上でcron式を簡単に設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/0b6f9336-4004-4ce6-97ff-b9510e4dd004.png)

cron式の設定方法はこちら：[cron 式と rate 式を使用して Amazon EventBridge でルールをスケジュールする - Amazon EventBridge](https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-scheduled-rule-pattern.html)

cronを設定したことがある人は覚えがあるかもしれませんが、タイムゾーンがずれているせいで思ったとおりに動かないなどがあったと思います。（調査をしたらタイムゾーンがズレているなどの苦い経験）

EventBridge SchedulerではUIでタイムゾーンを簡単に設定できるようになっています。

## ターゲットの設定方法

以下の通り、ターゲットの設定方法は2つあります。

- Frequently used APIs
- All APIs

Frequently used APIsの場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/8f73a355-11d5-4209-9940-ba3a9475699e.png)

All APIsの場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/328abd70-e602-4be9-98e2-bd5857596675.png)

よく使われるものから探すか検索して探すかのどちらかになります。

## その他の設定

どのようなAPIを使うか設定すると次の設定項目が表示されます。

- Schedule state
    - スケジュール作成後にスケジュールを有効にするかかどうか(ENABLE / DISABLE)
- Action after schedule completion
    - スケジュール完了後のアクションを設定します（NONE / DELETE）
- Retry policy and dead-letter queue (DLQ)
    - ターゲットの呼び出しにEventBridge Schedulerが失敗した際の再試行ポリシーとデッドレターキュー（DLQ）を設定します。DLQはクロスアカウントでSQSと統合できます
- Encryption
    - 暗号化の設定
- Permissions
    - IAMロールの設定、EventBridge SchedulerもAWSサービスのひとつであるため、サービス間の連携にはIAMが必要です

### 補足：EventBridge Schedulerの設定画面で作成できるIAMロールについて

設定画面で作成できるIAMロールについて見ていきましょう。（以下、画面）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/b3bd143d-5817-4005-9f78-408e160e6bb0.png)

結論から説明すると`利用するAWSのAPIに合わせて最小権限の原則が適用され、最低限のロールのみ割り当てられる`ようになっています。

たとえば、時間が来たら東京リージョンに構築されているLambdaをInvoke（実行）する場合
ポリシーは以下のようになります。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:ap-northeast-1:{account_id}:function:{function_name}:*",
                "arn:aws:lambda:ap-northeast-1:{account_id}:function:{function_name}"
            ]
        }
    ]
}
```

もちろん信頼関係も最小限の権限で作成されます。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "{account_id}"
                }
            }
        }
    ]
}
```

以上のように使いやすさを維持しながらもセキュアに利用できるサービスとして提供されています。

## 料金面

これだけのサービスをサーバレス（サーバ管理不要）で扱えるなんてお高いんでしょう？と思ったかもしれません。

高いか低いかは利用用途や予算もありますのでなんとも言えませんが、EventBridge Schedulerはスケジュールの呼び出し回数に応じて課金される料金形態になります。

参考：[料金 - Amazon EventBridge | AWS](https://aws.amazon.com/jp/eventbridge/pricing/)

2025年6月16においては以下の無料枠が利用できます。朝昼晩で365日動かしても無料枠を消費するだけで済みそうです。
> 月間無料起動回数 1400 万回後の月間スケジュール起動回数 100 万回あたり USD 1.25

## まとめ

今回はAmazon EventBridgeのうちのひとつEventBridge Schedulerの機能について用語を整理しながらチェックしました。

EventBridge Schedulerというサービスを見た時ですが、個人的にはWindowsのタスクスケジューラを思い出しました。

できることはクラウド上のアクションをスケジューリングできるということなので解釈としてはあまり間違えてはいないのかなというところです。

次は他のEventBridgeのサービスを見てみたいと思います。