Open3

VercelのCron Jobs覚え書き

人3人3

プロジェクトルートにvercel.jsonを追加する
cronの時間設定は分 時 日 月 曜日

毎週月曜朝10時はこう(タイムゾーンはUTC)

{
    "crons": [{
      "path": "/api/cron",
      "schedule": "0 10 * * 1"
    }]
}
人3人3

/api/cronにhandlerを書く
Vercelがcron起動時に自動的に環境変数CRON_SECRETに指定した値をヘッダに入れて送ってくれる

以下はPage Routerの場合。App Routerの場合はapp/api/cron/route.ts

src/pages/api/cron.ts
import type { NextApiRequest, NextApiResponse } from 'next';

/**
 *  毎週月曜10時に動くCron Job
 * @param request 
 * @param response  200: 正常
 * @returns 
 */
export default async function handler(
  request: NextApiRequest,
  response: NextApiResponse,
): Promise<NextApiResponse<any> | undefined> {
  if (process.env.CRON_SECRET && request.headers.authorization !== `Bearer ${process.env.CRON_SECRET}`) {
    return response.status(401).end('Unauthorized');
  }
  response.status(200).json({ result: "ok" });
}
人3人3

ローカルでテストする方法

curl -H 'Authorization:Bearer <CRON_SECRET>'  http://localhost:3000/api/cron