はじめに
本記事はAmazon EventBridge Schedulerのイマイチな部分を説明する予定でしたが、
投稿日時点では改善されていて良い機能になっているという内容になります
検証をすることにした経緯も書いていますが、結論だけ読みたい方はスキップしてください
Amazon EventBridge Schedulerを検証することになった経緯
とある業務システムを構築している際に、指定の時間になったらLambdaを実行する機能を実装することになりました。
繰り返し実行するのではなく、1回のみ実行することになります
簡単に説明すると、スマホのアラームのように、WEB画面から時刻を入力し、その時刻になればLambdaを実行させるシンプルな機能です
時刻の登録は画面から行うため、AWSコンソールでポチポチ設定することができません
WEBアプリとして一連の流れを実現させる必要がありました
アーキテクチャとしては、本記事の投稿時点では、Amazon EventBridge Schedulerが発表されていますが、それ以前に実装を行なったため、Amazon EventBridgeを駆使して実装しました
実装後Amazon EventBridgeでしばらく運用していましたが、問題が発生したため解決策を調査していたところ、解決策になりそうなAmazon EventBridge Schedulerが発表されていたため検証を開始しました
アーキテクチャについて
要件を満たすために以下のアーキテクチャを採用しました
① 実行の予約
画面 → API Gateway → Lambda → EventBridge
② 実行
EventBridge → Lambda
画面の内容は省略します。一般的なS3ホスティングしているwebアプリです
①では、画面から入力されたパラメーターを元に、EventBridgeのルールを作成して処理を終了します
②では、①で設定した時刻になったらEventBridgeがLambdaをinvokeします
今回、②で実行する処理は簡単なものだったのでLambdaを採用しています
起動されるLambdaは常に同じLambda関数です
アーキテクチャの問題点
EventBridgeで1回のみLambdaを実行する設定は行えません
そのため、cron式を利用して、年1回の起動の設定を行い、実行が終わったらルールを削除する実装を行なっていました
要件通りの動作はしますが、シンプルではありませんし、ルールを削除をするロジックがエラーとなった場合にルールが残り続けることになるので、もやもやする実装になっています
最大の問題点としては、ルールの設定数上限が、イベントバスごとに300件となっている点です
こちらはサポートに申請すれば緩和可能なようですが、それでも上限は2000件になっているようです
また、イベントバスはアカウントの上限で100件となっており、登録できるルールとしては最大で100件*2000件で20万件となっています
https://docs.aws.amazon.com/ja_jp/eventbridge/latest/userguide/eb-quota.html
一見十分に思えますが、何も考えずに使っていると最初に上限に達するのは300件になります
イベントバスを管理するのもロジックが複雑になるため、イベントバスを増やしてまでルールの上限数を増やしたくありません
Amazon EventBridge Schedulerの登場
Amazon EventBridge Schedulerが登場したことによって、Amazon EventBridgeの問題が解決しました
まず、デフォルトで300件だったルールの上限数が100万件になっています
さらに、cronを駆使してなんちゃって1回実行としていたところが、Amazon EventBridge Schedulerの機能でできるようになりました
Amazon EventBridge Schedulerのイマイチだったところ
Amazon EventBridge Schedulerは発表された時点では、1回限りのスケジュールでLambdaを実行しても、ルールが残り続けていました
上限が100万件になったとはいえ、削除を意図的に行わなければいずれ上限を迎えるイマイチな仕様でした
発表当時は欲しかった機能がでた!とウキウキしながら検証してガッカリした記憶があります
その点が2023/8に改善されていました
https://aws.amazon.com/jp/about-aws/whats-new/2023/08/amazon-eventbridge-scheduler-deletion-completion/
「スケジュール完了後のアクション」でDELETEを選択することで、実行が終わったルールが削除されるようになるので、開発者はルールの上限数をほとんど意識しなくてもよくなり、EventBridgeの上限数に怯えながら生活することはなくなりました
結論
Amazon EventBridge SchedulerはAmazon EventBridgeよりも時刻による起動管理が行いやすくなっています
Amazon EventBridgeではルールを登録できる上限がありましたが、Amazon EventBridge Schedulerでは解決されています
Amazon EventBridge | Amazon EventBridge Scheduler | |
---|---|---|
スケジュール数のクォータ | 300 | 100万 |
cron式を使って1回のみ起動する必要はなくなり、EventBridge Schedulerの機能で行えるようになりまし