EventBridgeを時間指定で有効化/無効化するEventBridgeを作成する

2023.11.15

データアナリティクス事業本部のueharaです。

今回は、EventBridgeを時間指定で有効化/無効化するEventBridgeを作成してみたいと思います。

はじめに

タイトルから「何を言ってるんだ?」と思われた方もいらっしゃるかもしれませんが、例えば以下のように特定の時間のみS3のPutイベントを検知したいケースを考えます。

EventBridgeそれ自身には、時間指定でステータスを有効/無効にする機能はありません。

例えばPutイベントを検知した上での起動先がLambdaなのであれば、Lambda内でプログラム的に「9時〜17時の間でなければ処理しない」という処理を入れることもできるのですが、ここではEventBridgeスケジューラを用いてそもそもイベントが発火しないようにすることを考えます。

やってみた

EventBridgeスケジューラ用のIAMロールの作成

まず、EventBridgeスケジューラのIAMロールを作成します。

IAMロールの作成画面で信頼されたエンティティタイプを「カスタム信頼ポリシー」に設定し、カスタム信頼ポリシー欄に以下のJSONを記載します。

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

今回は検証用なので、ポリシー選択では一旦EventBridgeのフルアクセスを許可します。

これでロールの作成は完了です。

EventBridgeスケジューラの作成

AWSマネジメントコンソールでEventBridgeを選択し、スケジュール→スケジュールの作成と進みます。

取り急ぎ対象のEventBridgeを無効化するスケジューラを作成したいので、時間は毎日17時に起動するようスケジュールのパターンを設定します。

ターゲットの選択では「すべてのAPI」とし、EventBridgeから DisableRule を選択します。

あとは表示されるJSONの Name に無効にしたいEventBridgeの名前を指定すればOKです。

これで対象のEventBridgeを時間指定で無効化するEventBridgeのスケジューラの作成は完了です。

逆に有効化するEventBridgeのスケジューラを作成したい時は、ターゲットの選択で「すべてのAPI」から EnableRule の方を選択します。

以上の手順でEventBridgeを時間指定で有効化/無効化するEventBridgeを作成することができます。

最後に

今回は、EventBridgeを時間指定で有効化/無効化するEventBridgeを作成してみました。

参考になりましたら幸いです。

参考文献