サーバーレス
サーバーレス・エッジ関数のための cron
Vercel、Netlify、Lambda、Cloudflare の関数への HTTP 呼び出しをスケジュール — クラウドロックインなしで。
問題点
サーバーレスはスケジュール実行が必要になるまでは優れています。各プラットフォームには中途半端な cron があります。Vercel と Netlify の cron はデプロイに縛られ、Lambda には EventBridge の配線が必要で、いずれもまともなリトライができず、実行が失敗しても教えてくれません。さらに悪いことに、スケジューリングが使っているクラウドに縛られてしまいます。
SteadyCron による解決方法
- 1 関数の URL に対して HTTP ジョブを作成し、期待するメソッド、ヘッダー、ボディを設定します。
- 2 スケジュールとタイムゾーンを選択します。SteadyCron は DST を正しく処理しながらエンドポイントを時刻通りに呼び出します。
- 3 バックオフ付きのリトライとタイムアウトを設定し、一時的なコールドスタートや 502 エラーで実行が抜け落ちないようにします。
- 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
Export all as manifest
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時のインデックス再構築は実行されたか、何を返したか?」という問いに答えられます。
関連ドキュメント
気づいたときには手遅れにならないために
無料プランで始めましょう — クレジットカード不要。
無料で始める