スケジュールジョブ
スケジュールジョブは、Google Cloud Scheduler のように、決まった時刻に組織のアプリへ HTTP 呼び出しを 1 回行います。
ジョブの構成#
呼び出しは、その時点で公開中のバージョンに届きます。
| 項目 | 説明 |
|---|---|
| アプリ | 呼び出すコンテナアプリ。 |
| パス | アプリのアドレスの後ろに付けます。/ で始まり、クエリ文字列も使えます。例:/tasks/daily |
| メソッド | GET、POST、PUT、PATCH、DELETE。既定は POST です。本文を送るのは POST、PUT、PATCH だけです。 |
| スケジュール | 5 つのフィールドの cron 式(分、時、日、月、曜日)。最短で 1 分に 1 回です。 |
| タイムゾーン | 既定は Asia/Taipei です。 |
cron 式の例:
| 式 | 実行タイミング |
|---|---|
0 9 * * * | 毎日 9:00 |
*/15 * * * * | 15 分ごと |
0 8 * * 1 | 毎週月曜 8:00 |
0 0 1 * * | 毎月 1 日 0:00 |
ジョブを作成する#
- アプリにエンドポイントを追加する 例:
POST /tasks/dailyに定期処理を実装し、デプロイして公開します。 - ジョブを作成する 「デプロイ › スケジュールジョブ」を開き、アプリ、パス、スケジュールを指定します。
- 手動で 1 回実行する 「今すぐ実行」で試し、実行履歴でレスポンスコードとログを確認します。
呼び出し元を確認する#
既定では、呼び出しに送信元を証明する情報は付きません。次のどちらかを選びます。
- ジョブに
X-Cron-Secretなどの独自ヘッダーを設定し、値をアプリのシークレットとして保存して、コードで照合します。 - 署名付きトークンを有効にします。呼び出しに
Authorization: Bearer <JWT>が付くので、https://api.agentlab.cresclab.com/.well-known/jwks.jsonで検証します。audはfranky:app:<アプリ ID>です。
実行の動作#
| 項目 | 動作 |
|---|---|
| 重複実行 | 重なりません。前回の実行中に予定時刻が来た回はスキップされます。 |
| 配信 | 少なくとも 1 回。同じ実行が 2 回届くことがあるので、X-Franky-Run-Id ヘッダーで重複を除いてください。 |
| 再試行 | 既定は 0 回、最大 5 回です。 |
| 期限 | 15 秒〜30 分。既定は 3 分です。 |
const runId = req.headers["x-franky-run-id"];
if (await alreadyHandled(runId)) {
res.writeHead(200).end();
return;
}