Databricks

Databricks Jobs APIで実現するジョブ自動化・CI/CD・監視

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Databricksのジョブ管理はUIでの手動操作でも可能ですが、本番環境での運用やCI/CDパイプラインの構築には Jobs APIの理解が不可欠です。この記事では、Jobs API 2.1のエンドポイント構成、リクエスト例、 ジョブ定義のJSON構造、認証方式、そしてRuns APIによる実行監視までを体系的に整理します。

Jobs API 2.1 エンドポイント一覧

Jobs API 2.1で利用する主要エンドポイントを以下に整理します。 すべてのエンドポイントのベースURLは https://<workspace-url>/api/2.1/jobs/ です。

操作メソッドエンドポイント用途
ジョブ作成POST/api/2.1/jobs/create新規ジョブの定義と登録
ジョブ一覧GET/api/2.1/jobs/listワークスペース内の全ジョブ取得
ジョブ詳細GET/api/2.1/jobs/get?job_id={id}特定ジョブの定義と状態取得
即時実行POST/api/2.1/jobs/run-now既存ジョブのトリガー実行
ジョブ更新POST/api/2.1/jobs/resetジョブ定義の完全上書き
部分更新POST/api/2.1/jobs/updateジョブ定義の一部フィールドのみ変更
ジョブ削除POST/api/2.1/jobs/deleteジョブの完全削除
実行一覧GET/api/2.1/jobs/runs/listジョブの実行履歴取得
実行詳細GET/api/2.1/jobs/runs/get?run_id={id}特定Runの状態・結果取得
実行キャンセルPOST/api/2.1/jobs/runs/cancel実行中Runの停止

resetはジョブ定義全体を置き換える(指定しなかったフィールドはデフォルトに戻る)のに対し、updateは指定したフィールドだけを変更します。CI/CDでは定義全体をコードで管理するためresetが多用されます。

curlリクエスト例

以下はPATを使ってジョブを作成し、実行するcurl例です。

# ジョブ作成
curl -X POST \
  https://adb-1234567890.12.azuredatabricks.net/api/2.1/jobs/create \
  -H "Authorization: Bearer dapi_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "daily_etl_pipeline",
    "tasks": [{
      "task_key": "ingest",
      "notebook_task": {
        "notebook_path": "/Repos/prod/etl/ingest"
      },
      "new_cluster": {
        "spark_version": "14.3.x-scala2.12",
        "node_type_id": "i3.xlarge",
        "num_workers": 4
      }
    }]
  }'

# ジョブ実行(run-now)
curl -X POST \
  https://adb-1234567890.12.azuredatabricks.net/api/2.1/jobs/run-now \
  -H "Authorization: Bearer dapi_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"job_id": 12345}'

Pythonリクエスト例

requestsライブラリを使った同等の処理です。本番ではエラーハンドリングとリトライを追加します。

import requests

WORKSPACE_URL = "https://adb-1234567890.12.azuredatabricks.net"
TOKEN = "dapi_xxxxxxxxxxxx"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

# ジョブ作成
job_config = {
    "name": "daily_etl_pipeline",
    "tasks": [{
        "task_key": "ingest",
        "notebook_task": {"notebook_path": "/Repos/prod/etl/ingest"},
        "new_cluster": {
            "spark_version": "14.3.x-scala2.12",
            "node_type_id": "i3.xlarge",
            "num_workers": 4
        }
    }]
}
resp = requests.post(
    f"{WORKSPACE_URL}/api/2.1/jobs/create",
    headers=HEADERS, json=job_config
)
job_id = resp.json()["job_id"]

# 即時実行
run_resp = requests.post(
    f"{WORKSPACE_URL}/api/2.1/jobs/run-now",
    headers=HEADERS, json={"job_id": job_id}
)
run_id = run_resp.json()["run_id"]

# 実行結果のポーリング
import time
while True:
    status = requests.get(
        f"{WORKSPACE_URL}/api/2.1/jobs/runs/get",
        headers=HEADERS, params={"run_id": run_id}
    ).json()
    life_cycle = status["state"]["life_cycle_state"]
    if life_cycle in ("TERMINATED", "INTERNAL_ERROR", "SKIPPED"):
        break
    time.sleep(30)

ジョブ定義JSON構造(マルチタスク)

Jobs API 2.1の最大の特徴はマルチタスクジョブです。複数のタスクを1つのジョブ内に定義し、depends_onで依存関係を宣言的に記述できます。

{
  "name": "daily_pipeline",
  "schedule": {
    "quartz_cron_expression": "0 0 6 * * ?",
    "timezone_id": "Asia/Tokyo"
  },
  "tasks": [
    {
      "task_key": "extract",
      "notebook_task": {"notebook_path": "/Repos/prod/etl/extract"},
      "new_cluster": { ... }
    },
    {
      "task_key": "transform",
      "depends_on": [{"task_key": "extract"}],
      "notebook_task": {"notebook_path": "/Repos/prod/etl/transform"},
      "new_cluster": { ... }
    },
    {
      "task_key": "load",
      "depends_on": [{"task_key": "transform"}],
      "notebook_task": {"notebook_path": "/Repos/prod/etl/load"},
      "new_cluster": { ... }
    }
  ],
  "email_notifications": {
    "on_failure": ["[email protected]"]
  },
  "max_concurrent_runs": 1
}

max_concurrent_runsを1にすると、前回のRunが完了するまで次のRunは開始されません。 スケジュール起動とrun-now APIの競合を防ぐために、本番ジョブでは1に設定するのが一般的です。

パラメータ渡し

run-now APIでジョブを実行する際に、パラメータを動的に渡すことができます。 ノートブックタスクではbase_parameters(ジョブ定義側のデフォルト)とnotebook_params(run-now側の上書き)で値を受け渡します。

# run-nowでパラメータ上書き
curl -X POST .../api/2.1/jobs/run-now \
  -d '{
    "job_id": 12345,
    "notebook_params": {
      "target_date": "2026-03-27",
      "mode": "full_refresh"
    }
  }'

ノートブック内ではdbutils.widgets.get("target_date")でパラメータを取得します。 Pythonタスクではpython_params、SparkSubmitタスクではspark_submit_paramsを使います。

Runs API による実行監視

ジョブの実行結果を確認するにはRuns APIを使います。重要なフィールドは以下の通りです。

フィールド値の例意味
life_cycle_statePENDING / RUNNING / TERMINATEDRunのライフサイクル段階
result_stateSUCCESS / FAILED / TIMEDOUT / CANCELED完了時の結果(TERMINATED時のみ)
state_message"Cluster is starting..."現在の状態メッセージ
start_time1711526400000開始時刻(ミリ秒エポック)
end_time1711530000000終了時刻(ミリ秒エポック)

API認証方式の比較

認証方式用途有効期限推奨シナリオ
PAT(Personal Access Token)個人の開発・テスト手動設定(最大365日)ローカル開発、一時的なスクリプト
OAuth M2M(Service Principal)CI/CD・自動化自動ローテーションGitHub Actions、Azure DevOps等のパイプライン
Azure AAD TokenAzure統合短期(1時間)Azureマネージド環境からの呼び出し

試験で問われるポイント

  • 「resetとupdateの違い」→ resetは定義全体の上書き、updateは部分変更
  • 「run-nowとsubmitの違い」→ run-nowは既存ジョブの実行、submit(runs/submit)は一時的なジョブ定義で即時実行
  • 「max_concurrent_runsの目的」→ 同一ジョブの同時実行数を制限し、リソース競合やデータ不整合を防止
  • 「CI/CDパイプラインに適した認証方式」→ OAuth M2M(Service Principal)

問題で確認

Data Engineer Professional

問題 1

あるデータエンジニアリングチームが、GitHub ActionsからDatabricks Jobs APIを使ってジョブを自動デプロイ・実行するCI/CDパイプラインを構築している。メンバーの退職時にAPIアクセスが失効するリスクを排除したい。最も適切な認証方式はどれか。

  1. チームリーダーのPersonal Access Token(PAT)を共有して使用する
  2. Service Principalを作成し、OAuth M2M認証でトークンを取得する
  3. ワークスペース管理者のユーザー名とパスワードをBasic認証で使用する
  4. 各メンバーが個人のPATを発行し、GitHub Secretsに個別登録する

正解: B

Service PrincipalによるOAuth M2M認証は、特定のユーザーに紐づかないため退職・異動の影響を受けません。PATの共有はセキュリティリスクが高く、Basic認証はDatabricksでサポートされていません。個人PATの個別登録は退職時にトークン無効化が必要で運用負荷が増大します。

よくある質問

Jobs API 2.0と2.1の違いは何ですか?

Jobs API 2.1ではマルチタスクジョブ(1つのジョブ定義に複数タスクを含めて依存関係を定義できる)がサポートされました。2.0では1ジョブ=1タスクの構造でしたが、2.1ではtasksフィールドに複数タスクを配列で定義し、depends_onで実行順序を制御できます。新規開発では2.1の利用が推奨されています。

Jobs APIでジョブを作成する場合、PATとOAuth M2Mのどちらを使うべきですか?

CI/CDパイプラインや自動化スクリプトではOAuth M2M(Machine-to-Machine)認証が推奨されます。PATは有効期限管理が必要で、ユーザーに紐づくため退職・異動時のリスクがあります。OAuth M2MはService Principalに紐づき、トークンの自動ローテーションが可能なため、本番運用ではM2Mが適切です。

Jobs APIで作成したジョブとUI上で作成したジョブに機能差はありますか?

機能差はありません。UI上で作成したジョブもAPIで取得・編集・実行が可能です。逆にAPIで作成したジョブもUI上で確認・手動実行できます。ただし、CI/CDで管理する場合はAPIまたはDatabricks Asset Bundles(DABs)経由で作成し、UI上での手動変更を禁止する運用が推奨されます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.