Databricks Asset Bundles(DABs)は、ジョブ、DLTパイプライン、ノートブック、MLモデルなどの Databricksアセットをコードとして定義し、複数環境(dev / staging / prod)に一貫してデプロイするための仕組みです。 databricks.ymlファイルにアセットの構成を記述し、Databricks CLIのbundleコマンドで検証・デプロイ・実行・削除を行います。
この記事では、DABsの基本概念、databricks.ymlの構造、環境ごとのtargets設定、 主要コマンド、そしてTerraformやReposとの使い分けを解説します。
DABsは、Databricksの「Infrastructure as Code(IaC)+ Application as Code」を実現するツールです。 従来のDatabricks開発では、ジョブやパイプラインをUIで手動作成し、 環境間の移行(dev → staging → prod)も手動でコピーしていました。 DABsではこれらをYAMLファイルで定義し、Git管理 + CI/CDによる自動デプロイを実現します。
DABsが管理できるアセットは以下の通りです。
DABsのプロジェクトルートに配置するdatabricks.ymlは、以下の主要セクションで構成されます。
bundle:
name: my-etl-pipeline
variables:
catalog_name:
description: "ターゲットカタログ"
default: "dev_catalog"
warehouse_id:
description: "SQL Warehouse ID"
workspace:
root_path: /Workspace/Users/${workspace.current_user.userName}/.bundle/${bundle.name}/${bundle.target}
resources:
jobs:
daily_etl:
name: "daily-etl-${bundle.target}"
schedule:
quartz_cron_expression: "0 0 2 * * ?"
timezone_id: "Asia/Tokyo"
tasks:
- task_key: ingest
notebook_task:
notebook_path: ./src/ingest.py
new_cluster:
spark_version: "14.3.x-scala2.12"
num_workers: 4
node_type_id: "i3.xlarge"
- task_key: transform
depends_on:
- task_key: ingest
notebook_task:
notebook_path: ./src/transform.py
new_cluster:
spark_version: "14.3.x-scala2.12"
num_workers: 8
pipelines:
dlt_pipeline:
name: "dlt-pipeline-${bundle.target}"
target: "${var.catalog_name}.bronze"
libraries:
- notebook:
path: ./src/dlt_definitions.py
targets:
dev:
mode: development
default: true
variables:
catalog_name: "dev_catalog"
staging:
variables:
catalog_name: "staging_catalog"
prod:
mode: production
variables:
catalog_name: "prod_catalog"
run_as:
service_principal_name: "prod-deployer-sp"targetsセクションは、同一のアセット定義を異なる環境にデプロイするための仕組みです。 各targetでvariables、権限、実行ユーザー(run_as)をオーバーライドできます。
| target属性 | 説明 | dev向け設定例 | prod向け設定例 |
|---|---|---|---|
| mode | development / production | development(プレフィックス付加、権限制限) | production(run_as必須、本番権限) |
| variables | 環境固有の変数値 | catalog_name: dev_catalog | catalog_name: prod_catalog |
| run_as | アセットの実行アイデンティティ | 省略(デプロイユーザー) | service_principal_name指定 |
| workspace.host | 対象ワークスペースURL | dev-workspace.cloud.databricks.com | prod-workspace.cloud.databricks.com |
| default | デフォルトtargetかどうか | true | 省略(false) |
developmentモードでは、リソース名に[dev ユーザー名]のプレフィックスが自動付加されるため、 複数開発者が同じワークスペースでバンドルをデプロイしても名前が衝突しません。 productionモードではrun_asの指定が必須で、サービスプリンシパルで実行するのがベストプラクティスです。
| コマンド | 説明 | 主な用途 |
|---|---|---|
| databricks bundle validate | databricks.ymlの構文・参照チェック | CI/CDのPRチェック、ローカル検証 |
| databricks bundle deploy -t dev | 指定targetにアセットをデプロイ | ジョブ / DLTパイプラインの作成・更新 |
| databricks bundle run -t dev daily_etl | デプロイ済みジョブを即時実行 | 動作確認、手動トリガー |
| databricks bundle destroy -t dev | デプロイしたアセットを全削除 | 検証環境のクリーンアップ |
| databricks bundle summary | デプロイ内容のサマリ表示 | デプロイ前の最終確認 |
variablesはdatabricks.yml内で定義し、targetsごとにデフォルト値をオーバーライドするか、 CLI実行時に--varフラグで注入します。
# CLI実行時に変数を注入
databricks bundle deploy -t prod --var="catalog_name=prod_catalog"
# CI/CDパイプライン(GitHub Actions)での例
- name: Deploy to prod
run: |
databricks bundle deploy -t prod \
--var="catalog_name=${{ secrets.PROD_CATALOG }}" \
--var="warehouse_id=${{ secrets.PROD_WAREHOUSE_ID }}"シークレット(パスワード、APIキーなど)はdatabricks.ymlには記述せず、 DatabricksのSecret Scopeに保存し、ノートブック内でdbutils.secrets.getで取得するのがベストプラクティスです。
| 比較項目 | Databricks Asset Bundles | Terraform | Repos(Git連携) |
|---|---|---|---|
| 主な対象 | ジョブ / DLT / ノートブック / MLモデル | ワークスペース / クラスタポリシー / UC / ネットワーク | ノートブック / Pythonファイルのバージョン管理 |
| 定義言語 | YAML(databricks.yml) | HCL(.tf) | Git管理のみ(宣言的定義なし) |
| 環境差分管理 | targets + variables | workspaces + tfvars | ブランチベース(手動切替) |
| 状態管理 | Databricksワークスペース側で管理 | S3 / Azure Blob / Terraform Cloudで管理 | なし(Gitの履歴のみ) |
| CI/CD統合 | Databricks CLI + GitHub Actions / Azure DevOps | terraform plan/apply + CI/CDツール | Git Push → 自動同期 |
| 削除管理 | bundle destroyで一括削除 | terraform destroyで一括削除 | 手動削除のみ |
| 学習コスト | 低(YAML + Databricks CLI) | 中〜高(HCL + 状態管理の理解) | 低(Git操作のみ) |
DABsはData Engineer Professional / Administration系の試験で出題されます。
Data Engineer Professional
問題 1
チームがDatabricksのETLジョブとDLTパイプラインを開発環境で作成し、本番環境に安全にデプロイしたい。本番ではサービスプリンシパルで実行し、カタログ名を切り替える必要がある。最も適切なアプローチはどれか。
正解: B
DABsはジョブとDLTパイプラインの環境間デプロイに最適化されたツールです。targets設定でカタログ名をvariablesで切り替え、run_asでサービスプリンシパルを指定できます。UIコピーは手動で漏れやすく、Terraformはインフラ層向き(ジョブ定義もできるがDABsの方がDatabricksアセットに特化)、Reposはバージョン管理のみでジョブ定義は含まれません。
Databricks Asset Bundles(DABs)とTerraformはどう使い分けますか?
DABsは「ジョブ・パイプライン・ノートブック」などDatabricksアセットの配布と環境差分管理に特化したツールです。一方Terraformは「ワークスペース・クラスタポリシー・ネットワーク・UCメタストア」などインフラレベルのリソース管理に適しています。実務では、インフラ基盤はTerraformで構築し、その上で動くアプリケーションアセット(ジョブ / DLTパイプライン / MLモデルなど)はDABsで管理する二層構成が推奨されます。
databricks.ymlの環境変数はどこで定義しますか?
targetsセクション内でvariablesブロックを使って環境ごとに値を切り替えます。例えばdev/staging/prodでカタログ名やクラスタサイズを変えたい場合、variablesにcatalog_nameを定義し、各targetでデフォルト値をオーバーライドします。CI/CDパイプラインでは--var フラグでコマンドラインから注入することも可能です。
DABsでデプロイしたアセットを完全に削除するにはどうしますか?
databricks bundle destroyコマンドを使います。このコマンドはbundleが管理するすべてのアセット(ジョブ、DLTパイプライン、デプロイされたノートブックなど)をワークスペースから削除します。ただし、ジョブが生成したデータ(Deltaテーブルなど)は削除されません。--auto-approveフラグを付けると確認プロンプトをスキップできますが、本番環境では手動確認が推奨です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...