Cloud SchedulerからCloud Runを定期実行するアーキテクチャ
推敲中 #
sequenceDiagram
autonumber
actor User as "オペレーター(手動)"
participant CS as "Cloud Scheduler"
participant GEN as "Cloud Run / Cloud Run Jobs(タスク生成)"
participant CT as "Cloud Tasks(キュー)"
participant RUN as "Cloud Run(処理サービス)"
participant DLQ as "Dead Letter Queue(任意 / Pub/Sub)"
participant MON as "Cloud Logging / Monitoring"
CS->>GEN: 毎日 09:00 JST に起動 (HTTP)
Note right of GEN: 認証なし前提(公開 or 内部限定)
JSTで start_date=today, end_date=today+1 を算出
tenant_id は配列(6社程度) or DB取得 loop tenant ごと(4〜6件) GEN->>CT: CreateTask {tenant_id, start_date, end_date} CT-->>GEN: 受理(task name を返却) end par タスク実行(並列度/レートはキュー設定) CT->>RUN: POST /process {tenant_id, start_date, end_date} RUN-->>CT: 200 OK(処理 20〜30秒) and 失敗リトライ CT->>RUN: 自動リトライ(指数バックオフ) alt 最大試行超過 CT->>DLQ: 失敗タスクを送信(任意) end end RUN->>MON: 構造化ログ(tenant_id, 日付, 所要時間, 結果) CT->>MON: ディスパッチ/リトライ/成功・失敗メトリクス %% 手動実行パス(任意) User-->>GEN: 手動でタスク生成を起動(同日のタスクを一括投入) User-->>RUN: 手動で直接 /process を叩く(単発実行) Note over RUN: OIDCなし運用時は
IP制限/ヘッダトークン等で保護を推奨
JSTで start_date=today, end_date=today+1 を算出
tenant_id は配列(6社程度) or DB取得 loop tenant ごと(4〜6件) GEN->>CT: CreateTask {tenant_id, start_date, end_date} CT-->>GEN: 受理(task name を返却) end par タスク実行(並列度/レートはキュー設定) CT->>RUN: POST /process {tenant_id, start_date, end_date} RUN-->>CT: 200 OK(処理 20〜30秒) and 失敗リトライ CT->>RUN: 自動リトライ(指数バックオフ) alt 最大試行超過 CT->>DLQ: 失敗タスクを送信(任意) end end RUN->>MON: 構造化ログ(tenant_id, 日付, 所要時間, 結果) CT->>MON: ディスパッチ/リトライ/成功・失敗メトリクス %% 手動実行パス(任意) User-->>GEN: 手動でタスク生成を起動(同日のタスクを一括投入) User-->>RUN: 手動で直接 /process を叩く(単発実行) Note over RUN: OIDCなし運用時は
IP制限/ヘッダトークン等で保護を推奨