Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Amazon EventBridge Schedulerの使いどころを整理してみた

Amazon/楽天ブラックフライデーで例年通り散財した、@kojiisdです。
今回、光学30倍ズーム、という謳い文句に惹かれて、10年ぶりくらいにパナソニックのコンデジを買ってしまいました。
これから写真を撮るのが楽しみになりそうです(^^
みなさんは散財しましたか?

さて、アクロクエストでは、エンジニアたちが仕事の中で気になっていたことを調査・検討・検証した際に、
その内容を社内勉強会でフィードバックしています。
今月は12月ということで、そのような調べたことを、アドベントカレンダーとしてブログに公開していくことにしました~!

初日はタイトルにもあるとおり、「Amazon EventBridge Schedulerの使いどころを整理してみた」です。

Amazon EventBridge Schedulerとは

AWSでイベント/スケジュールドリブンな処理の管理、というとAmazon EventBridgeが代表的ですが、先日、スケジュール機能に特化したAmazon EventBridge Schedulerが発表されました。
スケジュールベースのイベントトリガ管理を行う場合、従来のEventBridgeでは、Rulesという機能を使ってcronやrateを使用しつつ処理実行のタイミングを指定していましたが、以下のような制約がありました。


1. UTCベースのスケジュール指定が必要(誤ってJSTのつもりで時刻を設定してしまって、失敗した苦い経験ないですか?私はあります)
2. 実行できる機能は20程度のAWSサービスのみ


これらのスケジュール指定方法、実行サービスの幅などが広がったのがEventBridge Schedulerになります。



EventBridge Rulesとの比較は主に以下のようになっています。(抜粋)

Amazon EventBridge Scheduler Amazon EventBridge Rules
スケジュール上限 アカウント毎に100万 アカウント内リージョン毎に300
イベント実行スループット 秒間1,000トランザクション 秒間5トランザクション
指定可能なターゲット AWS SDKを使用した270以上のサービスと6,000以上のAPI 20以上のターゲット
時刻指定方法とタイムゾーン at(), cron(), rate()に対応
すべてのタイムゾーンとDST(サマータイム)に対応
cron(), rate()に対応
タイムゾーンUTCのみ、DSTはサポート外
1回限りのスケジュール 指定可能 指定不可
ウィンドウ時間を指定した設定 指定可能 指定不可

参考:Introducing Amazon EventBridge Scheduler | AWS Compute Blog


これを見ただけでも、より細かなスケジュール設定が可能になった、ということがわかりますね。


ちなみに従来のEventBridge Rulesでも、スケジュールベースのイベント作成はできますが、現在AWSコンソールにアクセスすると、下図のようにEventBridge Schedulerへの遷移を促されるので、今後スケジュールドリブンなトリガ管理はEventBridge Scheduler、イベントドリブンなトリガ管理はEventBridge Rules、と棲み分けがされていくかもしれないですね。

EventBridge Rulesでスケジュールドリブンイベント作成をしようとすると、EventBridge Schedulerに移動を促される

また、特に今回、大きな機能追加になりそうなものは以下かな、と感じました。

EventBridge Schedulerの特長的な機能追加

詳細を挙げればキリがないですが、私として気になった大きな機能追加は主に以下の3点ですね。

1. ウィンドウ時間(フレックスタイムウィンドウ)の指定が可能になった

予定した起動時刻に対して、指定した時間内の任意のタイミングに処理を起動させることが可能になりました。
これにより、同時刻に大量の処理が発生してしまいAWSのクォータ(制限)に引っかかりにくくすることができるようになりました。
例:12:00起動に設定してフレックスタイムウィンドウを15分と指定すると、12:00 - 12:15の間のどこかで実行されることになります。

2. 1回限りのスケジュールの指定が可能になった

今までのEventBridgeでは、基本的に「定期処理」または「イベントドリブンな処理」での指定が必要でした。
今回のリリースで、単発の実行のみを行う設定が可能になりました。(EventBridge Rulesでも1回限りの指定をするような小技はありますが、Rulesのスケジュールドリブンなイベント管理はあくまで「定期実行」が考え方のベースになっています。)
これにより、1度のみ実行すれば十分、というようなユースケースに対応することができるようになりました。

3. 直接AWSサービスのAPIコールをすることが可能になった

従来のEventBridge Rulesでは、どんなにシンプルな処理であっても、AWSサービスのAPIを呼び出すためにはLambdaを一度経由するなど、ワンクッションを置く必要がありました。
例:指定した時刻に、定期的に決まったDynamoDBのレコードのある値を書き換える。

EventBridge Schedulerでは、6000以上ものAWSサービスのAPIが直接コールできるようになったので、今までAPIを呼ぶためだけにLambdaを準備していたようなユースケースに対して、開発が不要になりました。

EventBridge Schedulerの使いどころを整理してみた

これらの機能追加を踏まえて、今回のサービスリリースで、どんなことが可能になりそうか、整理してみました。

1. 毎日、運用中のサービスの状態チェックを行う
2. 「1回限りの実行」を使用し、夜間のデータ移行処理を実行する
3. 短期間で、大量の処理を分散させて終わらせる
4. 業務時間外のEC2サーバーへのアクセスを制御する

1. 毎日、運用中のサービスの状態チェックを行う

運用しているサービスの状態チェックは、定期的に行っていると思います。このような定期的な処理は、従来のEventBridge Rulesでも指定可能でしたが、もちろんEventBridge Schedulerでも実現が可能です。EventBridge Schedulerでは、実行タイミングの指定時に、タイムゾーンの指定が可能になっているので、毎回UTCに変換した時刻を考える必要もなくなります。(従来のEventBridge Rulesでは、時刻指定の際にはUTCタイムゾーンが固定で指定されていました。)

タイムゾーンをPSTで指定した場合の実行時刻サンプル


2. 「1回限りの実行」を使用し、夜間のデータ移行処理を実行する

サービスの更改などによるデータ移行が必要になった場合、基本的にサービスに影響を出さないように、夜間に実施するケースが多いですが、EventBridge Schedulerで1回限りの実行イベントを定義すれば、夜間の指定した時間帯にデータ移行処理を実行することが可能になります。

深夜3時(日本時間)に1回限りの実行を行う


3. 短期間で、大量の処理を分散させて終わらせる

例えばLambdaで実施される処理を大量に並列で実行し、短期間で結果を得たい、というユースケースの場合、分割の粒度や実行タイミング、並列度を考えながら、Step Functionsを組むことがあると思います。

大量の処理を並列に実施するワークフロー


この場合、前処理のLambdaはどうしても実装が必要になってしまいますし、メイン処理も同時タイミングでの実行はサービスへの負荷が上がってしまい、サービスの運用に影響を出す恐れがあるため、実行タイミングにばらつきを発生させるよう、Step Functionsの設定で並列度を調整したり、場合によってはメイン処理のLambdaにWait処理を入れることがあると思います。

このようなユースケースの場合、フレックスタイムウィンドウを使って処理を分散させることが可能になります。

定期的なスケジュールの選択の上で、フレックスタイムウィンドウを「1時間」に設定すれば、指定した「毎日1時(JST)~2時」の間のいずれかで実行するイベントの作成が可能になり、ばらつきを制御する苦労から解放されます。

フレックスタイムウィンドウを利用した処理のばらつきの実現


4. 業務時間外のEC2サーバーへのアクセスを制御する

たとえばEC2サーバーで運用している社内サービスが以下の要件で稼働しているとします。
1. 業務時間中は、Webアクセスはすべて受け付ける。
2. 業務時間外は、メンテナンス用のIPアドレス以外からのアクセスを遮断する。

このような場合、今まではLambdaによりEC2のセキュリティグループを定期的に変更する処理の実装が必要でした。EventBridge Schedulerを利用すると、EC2のModifyInstanceAttribute API直接コールするように設定することで、Lambdaの実装なしに要件を満たすことが可能となります。

特定のAPIをEventBridge Schedulerから直接コールすることが可能

まとめ

今回、Amazon EventBridge Schedulerの用途について整理をしてみました。スケジュールドリブンなイベント管理の機能強化により、
さらに効率的にサービスの開発や運用ができそうですね。私もより深く調べて、活用していきたいと思います。


Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。


www.wantedly.com