サーバーレス・エッジ関数のための cron

Vercel、Netlify、Lambda、Cloudflare の関数への HTTP 呼び出しをスケジュール — クラウドロックインなしで。

問題点

サーバーレスはスケジュール実行が必要になるまでは優れています。各プラットフォームには中途半端な cron があります。Vercel と Netlify の cron はデプロイに縛られ、Lambda には EventBridge の配線が必要で、いずれもまともなリトライができず、実行が失敗しても教えてくれません。さらに悪いことに、スケジューリングが使っているクラウドに縛られてしまいます。

SteadyCron による解決方法

  1. 1 関数の URL に対して HTTP ジョブを作成し、期待するメソッド、ヘッダー、ボディを設定します。
  2. 2 スケジュールとタイムゾーンを選択します。SteadyCron は DST を正しく処理しながらエンドポイントを時刻通りに呼び出します。
  3. 3 バックオフ付きのリトライとタイムアウトを設定し、一時的なコールドスタートや 502 エラーで実行が抜け落ちないようにします。
  4. 4 すべての実行がステータスコード、レスポンスボディ、所要時間とともにログに記録され、失敗時はアラートが届きます。
# SteadyCron calls your function on schedule:
POST https://my-app.vercel.app/api/cron/rebuild-search-index
Authorization: Bearer ${SEARCH_CRON_TOKEN}
app.steadycron.com/jobs

Jobs

New job
Search jobs…
All HTTP Heartbeat
Status Group: env
env:prod 5 jobs 1 failing
weekly-digest-email HTTP 0 9 * * 1 in 2 days 3 days ago
nightly-db-backup Heartbeat 0 2 * * * in 19 h 5 h ago
stripe-reconciliation HTTP 0 */4 * * * in 38 min 3 h ago
cache-warmup HTTP */15 * * * * in 11 min now
search-index-sync Heartbeat */30 * * * * in 6 min 24 min ago
env:dev 3 jobs
seed-test-data HTTP 0 4 * * * in 14 h 10 h ago
preview-env-cleanup Heartbeat 0 */6 * * * in 2 h 4 h ago
trial-expiry-sweep HTTP 0 6 * * * yesterday

すべてのジョブのステータス、スケジュール、最終実行 — ひと目でわかる。

設計によるポータビリティ

SteadyCron は HTTPS エンドポイントを呼び出すだけなので、スケジュールが特定のベンダーに縛られることはありません。関数を Vercel から Cloudflare へ、さらに自前のサーバーへと移行しても、ジョブは動き続けます — 変わるのは URL だけです。

本格的な監査証跡

プラットフォーム cron のログは薄く一時的です。SteadyCron は実行ごとにステータスコード、レスポンス、タイミングの記録を保持するため、「午前3時のインデックス再構築は実行されたか、何を返したか?」という問いに答えられます。

関連ドキュメント

気づいたときには手遅れにならないために

無料プランで始めましょう — クレジットカード不要。

無料で始める