Amazon Web Services ブログ

Vercel が Amazon EventBridge スケジューラを利用して Cron Jobs を 2 か月でリリースした方法

Vercel は、Amazon EventBridge スケジューラを利用して Cron Jobs を実装し、顧客がスケジュールされたタスクを大規模に作成、管理、実行できるようにしました。この機能の導入は急速に進み、リリースから数か月以内に毎週 700 万回を超える cron 呼び出しが行われるようになりました。この記事では、同社がどのようにそれを実現したのか、そして同社が経験している大規模なスケールにどのように対処したかを示します。

Vercel は、エンジニアがフロントエンドアプリケーションのデプロイと実行をより容易に行えるようにするフロントエンドクラウドを構築しています。過去 2 年間で Vercel でのデプロイは 1 億件を超えています。Vercel は、サーバーレステクノロジーを大規模に利用することで、ユーザーが設定することなく、クラス最高の AWS インフラストラクチャを活用できるようサポートしています。Vercel は、デベロッパーがフロントエンドアプリケーションをホストするのに役立つ機能を多数提供しています。しかし、今年の初めまで、同社はまだ Cron Jobs を構築していませんでした。

cron ジョブは、あらかじめ決められた間隔または固定時刻における特定のコマンドまたはスクリプトの実行を自動化するスケジュールされたタスクです。これにより、ユーザーは、バックアップ、顧客への通知メールの送信、サブスクリプションの更新が必要な場合の支払い処理など、定期的かつ反復的なアクションを設定できます。cron ジョブは、効率を向上させ、日常業務を自動化するためにコンピューティング環境で広く利用されており、Vercel の顧客からは、この機能を求める声が多く寄せられていました。

2022 年 12 月、Vercel はイノベーションを促進するために社内ハッカソンを主催しました。ここで、Vincent Voyer 氏と Andreas Schneider 氏が協力して、Vercel プラットフォーム用の cron ジョブ機能のプロトタイプを構築しました。Voyer 氏と Schneider 氏は 5 人からなるチームを結成し、1 週間かけてこの機能に取り組みました。チームは、cron ジョブを表示するユーザーインターフェイスの構築から、機能のバックエンド実装の作成まで、さまざまなタスクをこなしました。

Amazon EventBridge スケジューラ
ハッカソンチームが cron ジョブの問題の解決について考え始めたとき、最初のアイデアは、スケジュールに従って実行される Amazon EventBridge ルールを利用することでした。しかし、この機能には AWS リージョンごとにアカウントあたり 300 個のルールという制限があり、これでは意図した用途には十分ではないことがすぐにわかりました。幸運にも、チームメンバーの 1 人が AWS コンピューティングブログで Amazon EventBridge スケジューラの発表について読んでおり、チームはこれが自分たちの問題を解決するのに最適なツールであると考えました。

EventBridge スケジューラを利用すると、基盤となるインフラストラクチャをプロビジョニングまたは管理することなく、270 を超える AWS サービスにわたって数百万のタスクを 1 回限り、または繰り返し実行するようにスケジュールできます。

cron ジョブの仕組み

Vercel で新しい cron ジョブを作成するには、顧客はこのタスクを実行する頻度と呼び出す API を定義する必要があります。Vercel はバックエンドで EventBridge スケジューラを利用し、新しい cron ジョブが作成されるときに新しいスケジュールを作成します。

エンドポイントを呼び出すために、チームは、入力パラメータとして呼び出す必要があるパスを受け取る AWS Lambda 関数を利用しました。

cron ジョブの仕組み

cron ジョブの実行時刻になると、EventBridge スケジューラは関数を呼び出し、設定されている顧客のウェブサイトのエンドポイントを呼び出します。

週末までに、Voyer 氏とチームは cron ジョブ機能の実用的なプロトタイプバージョンを完成させ、ハッカソンで賞を勝ち取りました。

Vercel Cron Jobs の構築
12 月のある 1 週間にわたってこのプロトタイプに取り組んだ後、ハッカソンは終了し、Voyer 氏とチームは通常業務に戻りました。2023 年 1 月初旬、Voyer 氏と Vercel のチームは、このプロジェクトを発展させて、実際の製品を実現することを決定しました。

ハッカソン中にチームは機能の基本的な部分を構築しましたが、本番環境に対応できるよう、いくつかの細かい点を磨き上げる必要がありました。Voyer 氏と Schneider 氏はこの機能に取り組み、2 か月も経たない 2023 年 2 月 22 日に Vercel Cron Jobs を一般向けに発表しました。発表のツイートは 40 万回を超えるビューを獲得し、コミュニティはこのリリースを高く評価しました。

cron ジョブを発表する Vercel のツイート

この機能の導入は非常に迅速でした。Cron Jobs のリリースから数か月以内に、Vercel は 1 週間あたり 700 万回を超える cron 呼び出しに達し、採用は今後も増加すると予想しています。

Cron Jobs の採用

Vercel Cron Jobs がスケールを処理する方法
これほどのペースで導入が進んでいることを踏まえると、Vercel にとってこの機能をスケールすることは非常に重要です。このペースで cron 呼び出しの量をスケールするには、ビジネスおよびアーキテクチャの観点でいくつかの決定を下す必要がありました。

ビジネスの観点からは、同社は無料利用枠の顧客についての制限を定めました。無料利用枠の顧客は、自らのアカウントで最大 2 個の cron ジョブを作成できますが、設定できるスケジュールは時間単位のみです。つまり、無料利用の顧客は 30 分ごとに cron ジョブを実行することはできず、最大でも 1 時間ごとに実行できるのみとなります。Vercel の有料階層の顧客のみが、タスクのスケジュール設定に EventBridge スケジューラの分単位の粒度を利用できます。

また、無料利用の顧客の場合、分単位の精度は保証されません。これを実現するために、Voyer 氏は EventBridge スケジューラの時間枠設定を利用しました。柔軟な時間枠設定を利用することで、時間枠内でスケジュールを開始できます。これは、ダウンストリームサービスに対する複数のリクエストの影響を軽減するために、スケジュールされたタスクが時間枠全体に分散されることを意味します。これは、例えば、多くの顧客が深夜にジョブを実行したい場合に非常に便利です。柔軟な時間枠を利用すると、設定された時間枠全体で負荷を分散できます。

アーキテクチャの観点からは、Vercel は API をホストし、cron ジョブが呼び出す関数を所有することの利点を活用しました。

呼び出しを検証しています

これは、Lambda 関数が EventBridge スケジューラによって開始されると、関数は API からの応答を待たずに実行を終了することを意味します。その後、Vercel は、オブザーバビリティメカニズムから API と Vercel 関数が正しく実行されたかどうかをチェックすることで、cron ジョブが実行されたかどうかを検証します。この方法を用いることで、関数の実行時間は 400 ミリ秒未満と非常に短くなります。これにより、Vercel は同時実行の制限に影響を及ぼすことなく、1 秒あたりに多くの関数を実行できます。

Lambda の呼び出しと実行時間のダッシュボード

影響
Vercel による Cron Jobs の実装は、サーバーレステクノロジーがどのようなことを実現できるのかを示す優れた例です。2 か月間にわたって 2 人がフルタイムで働くことで、コミュニティが必要としていた機能をリリースすることができ、その機能は広く導入されました。この機能は Vercel のプラットフォームの完全性を示すものであり、有料アカウントに移行するよう顧客を説得するための重要な機能となっています。

EventBridge スケジューラの利用を開始するには、EventBridge スケジューラの Serverless Land のパターンを参照してください。ここでは、役立つ幅広い例を見つけることができます。

– Marcia

原文はこちらです。