第5章 CI/CDの実装 / 想定学習時間:30〜40分 / 最終確認:2026年8月

5-2. Declarative Automation Bundles(旧 Databricks Asset Bundles)と環境別デプロイ

🎯 この節の学習目標

1. Automation Bundle とは:資産をコードとして定義する

Declarative Automation Bundles(旧 Databricks Asset Bundles)は、ジョブやパイプラインといったワークスペース資産を YAML ファイル(databricks.yml)でコードとして宣言的に定義し、ソースコードと一緒にパッケージ化・構成・昇格(dev → test → prod)するための仕組みです。かつては「Databricks Asset Bundles(略称 DABs)」という名称で、現在は「Declarative Automation Bundles」(個々のバンドルは「Automation Bundle」)に改名されていますが、仕組みはそのまま引き継がれています(本書では以降「Automation Bundle」または単に「Bundle」と表記します)。

Bundle が解決するのは「UI で手作業で作ったジョブは、別の環境に正確に再現できない」という問題です。ジョブの定義・パイプラインの設定・ソースコードを1つのプロジェクトとしてまとめ、同じ定義ファイルからどの環境にも同じものをデプロイできるようにします。これは一般に IaC(Infrastructure as Code)と呼ばれる考え方の Databricks 版です。

📘 試験対策(旧名称でも出題されうる)

試験問題では旧称の Databricks Asset Bundles(DABs)のまま出題される可能性があります。「Asset Bundles を使ってジョブをデプロイする」「DABs の databricks.yml」といった表現が出てきても、本節の Automation Bundle の内容がそのまま対応します。同様に、Bundle に含めるパイプラインが旧称 Delta Live Tables(DLT)と表記されることもあります(現行名称は Lakeflow Spark Declarative Pipelines)。

🚀 現行Databricks(2026年8月)

現行の名称は Declarative Automation Bundles / Automation Bundle です。定義ファイルが databricks.yml であること、targets で環境を切り替えること、Databricks CLI の databricks bundle コマンド群で操作すること(5-3)は旧称時代と変わりません。名前の読み替えだけ押さえれば、既存の DABs の知識がそのまま使えます。

2. Bundle に含められる資産

1つの Bundle には、プロジェクトを構成する複数の資産をまとめて定義できます。

資産説明
Lakeflow Jobsタスクの依存関係・スケジュール・クラスタ設定を含むジョブ定義(第4章)
Lakeflow Spark Declarative Pipelines(旧 Delta Live Tables)宣言的パイプラインの定義(第3章)
ノートブック・Python ファイル等のソースコードジョブやパイプラインから参照される実装コード
その他のワークスペース資産ダッシュボード、アラート、モデルサービングエンドポイントなど、YAML で定義できる各種リソース

つまり「パイプライン本体+それを動かすジョブ+ソースコード」という一連のまとまりを、1つのバージョン管理されたプロジェクトとして扱えます。Bundle のプロジェクトは 5-1 で学んだ Git リポジトリに置き、Git Folders・PR・CI/CD と組み合わせて運用します。

3. databricks.yml の基本構造

Bundle の中心となるのが、プロジェクトのルートに置く databricks.yml です。最低限の構造は次の3ブロックです。

💡 具体例:databricks.yml の最小例

# databricks.yml — Bundle 定義の最小例
bundle:
  name: sales_etl            # Bundle(プロジェクト)の名前

variables:
  catalog:                   # 環境ごとに差し替える変数
    default: dev_catalog

resources:
  jobs:
    daily_sales_job:         # ジョブをコードとして定義
      name: daily-sales-etl
      tasks:
        - task_key: run_etl
          notebook_task:
            notebook_path: ./src/etl_notebook.py
            base_parameters:
              catalog: ${var.catalog}   # 変数を参照

targets:
  dev:
    default: true            # 省略時のデプロイ先
    workspace:
      host: https://dev-workspace.example.databricks.net
  test:
    workspace:
      host: https://test-workspace.example.databricks.net
    variables:
      catalog: test_catalog  # test では変数をオーバーライド
  prod:
    workspace:
      host: https://prod-workspace.example.databricks.net
    variables:
      catalog: prod_catalog  # prod 用の値に差し替え

ポイントは、resources のジョブ定義は1つだけ書き、環境ごとに変わる部分(ワークスペース、カタログ名など)を targetsvariables 側に寄せていることです。デプロイ時に --target test のようにターゲットを指定すると、その環境の設定・変数値が適用されます(コマンドは 5-3)。

4. targets と variables:同一コードベースを環境ごとに差し替える

環境別デプロイの中核となる考え方は「コードは1つ、設定は環境ごと」です。

仕組み役割
targetsデプロイ先環境の定義。環境ごとにワークスペース URL、実行モード、権限、変数の上書きを指定するdev / test / prod の3ターゲットを定義し、デプロイ時に選択する
variables環境によって変わる値をパラメータ化する。既定値を定義し、ターゲットごとにオーバーライドできるカタログ名(dev_catalogprod_catalog)、スケジュールの有効/無効、クラスタサイズ、通知先

これにより、dev で動作確認したものとまったく同じ定義が test・prod へ昇格していきます。「prod だけ手作業で設定したので dev と挙動が違う」という事故を仕組みで防げるのが Bundle の価値です。

Git リポジトリdatabricks.yml + ソースコード(単一のコードベース)
databricks bundle deploy --target dev
dev 環境variables: dev_catalog / スケジュール停止で開発・検証
PR マージ後、--target test でデプロイ
test 環境variables: test_catalog / 統合テストを実行
承認後、--target prod でデプロイ
prod 環境variables: prod_catalog / スケジュール有効で本番稼働

図:同一の Bundle 定義を targets で切り替えて dev → test → prod へ昇格する

この昇格を CI/CD パイプラインから自動実行する方法(CLI コマンド、認証、GitHub Actions への組み込み)は次の 5-3 で扱います。

5. Bundle が正解になる典型パターン

試験では「どの仕組みを使うべきか」を選ばせる形式で Bundle が問われます。次のキーワードが要件に含まれていたら、Automation Bundle(旧 Asset Bundles)が正解の候補です。

📝 試験のポイント

「チームはジョブとパイプラインをモジュール化された方法でデプロイし、バージョン管理と CI/CD での再現性を確保したい。どの機能を使うべきか?」→ 正解は「Databricks Asset Bundles(現 Declarative Automation Bundles)」です。誤答側には「ワークスペース UI でジョブを手動で再作成する」「ノートブックを手動でエクスポート/インポートする」「Git Folders だけで済ませる」などが並びます。Git Folders はコードのバージョン管理を担いますが、ジョブやパイプラインという資産の定義とデプロイまでは面倒を見ません。この違いが決め手です。

✅ この節のまとめ

練習問題

問1. データエンジニアリングチームは、ジョブとパイプラインの定義をバージョン管理し、モジュール化された再現性のある方法で複数環境へデプロイしたい。最も適切な機能はどれか。

  1. ワークスペース UI で環境ごとにジョブを手動作成し、設定をスプレッドシートに記録する
  2. Databricks Asset Bundles(現 Declarative Automation Bundles)でジョブ・パイプラインを YAML 定義し、環境ごとにデプロイする
  3. ノートブックを DBC 形式でエクスポートし、各環境へ手動インポートする
  4. Git Folders に置いたノートブックを各環境のユーザーがそれぞれ手動実行する
解答と解説を見る

正解:B

「モジュール化されたデプロイ・バージョン管理・再現性」という要件の組み合わせは Automation Bundle(旧 Asset Bundles)の典型ユースケースです。AとCは手作業のため再現性がなく、環境差分の事故を防げません。Dの Git Folders はコードのバージョン管理はできますが、ジョブやパイプラインという資産の定義・デプロイ・スケジュール実行までは担えません。

問2. Automation Bundle の databricks.yml において、dev/test/prod といったデプロイ先環境ごとの設定(ワークスペースや変数の上書き)を定義するトップレベルのブロックはどれか。

  1. environments 弁別子を各リソースの中に書く
  2. targets
  3. clusters
  4. workspaces
解答と解説を見る

正解:B

環境別設定は targets ブロックで定義します。ターゲットごとにワークスペースの指定や variables のオーバーライドを記述し、デプロイ時に --target で選択します。Aのようにリソース定義の中へ環境分岐を埋め込むのではなく、リソースは1つ書いて差分を targets 側に寄せるのが Bundle の設計です。CとDはトップレベルの環境設定ブロックとして存在しません。

問3. 同じジョブ定義を dev では dev_catalog、prod では prod_catalog に書き込むようにしたい。Bundle での最も適切な実現方法はどれか。

  1. dev 用と prod 用に databricks.yml を2ファイル作成し、それぞれ別のリポジトリで管理する
  2. variables でカタログ名を変数化し、targets の dev / prod でそれぞれの値にオーバーライドする
  3. ジョブのノートブック内にカタログ名をハードコードし、デプロイ後に手で書き換える
  4. prod にデプロイした後、ワークスペース UI でジョブのパラメータを手動修正する
解答と解説を見る

正解:B

「コードは1つ、設定は環境ごと」が Bundle の原則で、環境差分は variables と targets のオーバーライドで表現します。Aは定義が二重管理になり、修正漏れで環境差分の事故を招きます。CとDはデプロイ後の手作業を前提とするため再現性がなく、CI/CD で自動化する目的に反します。特にDは「同じ定義から同じものを作る」という Bundle の価値を打ち消してしまいます。

問4. Declarative Automation Bundles(旧 Databricks Asset Bundles)に関する説明として正しいものはどれか。

  1. Bundle に含められるのはノートブックだけで、ジョブやパイプラインの定義は含められない
  2. Bundle は Git Folders の旧称であり、同じ機能を指す
  3. Lakeflow Jobs や Lakeflow Spark Declarative Pipelines(旧 Delta Live Tables)などの資産を databricks.yml で宣言的に定義し、まとめてデプロイできる
  4. Asset Bundles から Automation Bundles への改名に伴い、databricks.yml は廃止され JSON 形式のみになった
解答と解説を見る

正解:C

Bundle はジョブ・パイプライン・ソースコードなど複数の資産を YAML で宣言的に定義し、1つの単位としてデプロイする仕組みです(Aは誤り)。Git Folders(旧 Repos)はワークスペース内の Git 連携機能であり、Bundle とは別の機能です(Bは誤り)。改名後も定義ファイルは databricks.yml のままで、YAML が廃止された事実はありません(Dは誤り)。旧称 DABs のまま出題されても、同じ仕組みを指すと読み替えましょう。