Databricks Certified Data Engineer Associate 教科書
第5章 CI/CDの実装(Implementing CI/CD, 10%)
🎯 この節の学習目標
databricks.yml の基本構造(bundle / targets / resources)と、targets・variables による環境別設定の考え方を説明できる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)。
現行の名称は Declarative Automation Bundles / Automation Bundle です。定義ファイルが databricks.yml であること、targets で環境を切り替えること、Databricks CLI の databricks bundle コマンド群で操作すること(5-3)は旧称時代と変わりません。名前の読み替えだけ押さえれば、既存の DABs の知識がそのまま使えます。
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 と組み合わせて運用します。
Bundle の中心となるのが、プロジェクトのルートに置く databricks.yml です。最低限の構造は次の3ブロックです。
bundle — Bundle の名前などプロジェクト全体の情報resources — デプロイする資産(ジョブ、パイプライン等)の定義targets — デプロイ先の環境(dev / test / prod)ごとの設定💡 具体例: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つだけ書き、環境ごとに変わる部分(ワークスペース、カタログ名など)を targets と variables 側に寄せていることです。デプロイ時に --target test のようにターゲットを指定すると、その環境の設定・変数値が適用されます(コマンドは 5-3)。
環境別デプロイの中核となる考え方は「コードは1つ、設定は環境ごと」です。
| 仕組み | 役割 | 例 |
|---|---|---|
| targets | デプロイ先環境の定義。環境ごとにワークスペース URL、実行モード、権限、変数の上書きを指定する | dev / test / prod の3ターゲットを定義し、デプロイ時に選択する |
| variables | 環境によって変わる値をパラメータ化する。既定値を定義し、ターゲットごとにオーバーライドできる | カタログ名(dev_catalog → prod_catalog)、スケジュールの有効/無効、クラスタサイズ、通知先 |
これにより、dev で動作確認したものとまったく同じ定義が test・prod へ昇格していきます。「prod だけ手作業で設定したので dev と挙動が違う」という事故を仕組みで防げるのが Bundle の価値です。
図:同一の Bundle 定義を targets で切り替えて dev → test → prod へ昇格する
この昇格を CI/CD パイプラインから自動実行する方法(CLI コマンド、認証、GitHub Actions への組み込み)は次の 5-3 で扱います。
試験では「どの仕組みを使うべきか」を選ばせる形式で Bundle が問われます。次のキーワードが要件に含まれていたら、Automation Bundle(旧 Asset Bundles)が正解の候補です。
📝 試験のポイント
「チームはジョブとパイプラインをモジュール化された方法でデプロイし、バージョン管理と CI/CD での再現性を確保したい。どの機能を使うべきか?」→ 正解は「Databricks Asset Bundles(現 Declarative Automation Bundles)」です。誤答側には「ワークスペース UI でジョブを手動で再作成する」「ノートブックを手動でエクスポート/インポートする」「Git Folders だけで済ませる」などが並びます。Git Folders はコードのバージョン管理を担いますが、ジョブやパイプラインという資産の定義とデプロイまでは面倒を見ません。この違いが決め手です。
✅ この節のまとめ
databricks.yml。bundle(名前)・resources(ジョブ等の資産)・targets(環境別設定)が基本構造。問1. データエンジニアリングチームは、ジョブとパイプラインの定義をバージョン管理し、モジュール化された再現性のある方法で複数環境へデプロイしたい。最も適切な機能はどれか。
正解:B
「モジュール化されたデプロイ・バージョン管理・再現性」という要件の組み合わせは Automation Bundle(旧 Asset Bundles)の典型ユースケースです。AとCは手作業のため再現性がなく、環境差分の事故を防げません。Dの Git Folders はコードのバージョン管理はできますが、ジョブやパイプラインという資産の定義・デプロイ・スケジュール実行までは担えません。
問2. Automation Bundle の databricks.yml において、dev/test/prod といったデプロイ先環境ごとの設定(ワークスペースや変数の上書き)を定義するトップレベルのブロックはどれか。
正解:B
環境別設定は targets ブロックで定義します。ターゲットごとにワークスペースの指定や variables のオーバーライドを記述し、デプロイ時に --target で選択します。Aのようにリソース定義の中へ環境分岐を埋め込むのではなく、リソースは1つ書いて差分を targets 側に寄せるのが Bundle の設計です。CとDはトップレベルの環境設定ブロックとして存在しません。
問3. 同じジョブ定義を dev では dev_catalog、prod では prod_catalog に書き込むようにしたい。Bundle での最も適切な実現方法はどれか。
正解:B
「コードは1つ、設定は環境ごと」が Bundle の原則で、環境差分は variables と targets のオーバーライドで表現します。Aは定義が二重管理になり、修正漏れで環境差分の事故を招きます。CとDはデプロイ後の手作業を前提とするため再現性がなく、CI/CD で自動化する目的に反します。特にDは「同じ定義から同じものを作る」という Bundle の価値を打ち消してしまいます。
問4. Declarative Automation Bundles(旧 Databricks Asset Bundles)に関する説明として正しいものはどれか。
正解:C
Bundle はジョブ・パイプライン・ソースコードなど複数の資産を YAML で宣言的に定義し、1つの単位としてデプロイする仕組みです(Aは誤り)。Git Folders(旧 Repos)はワークスペース内の Git 連携機能であり、Bundle とは別の機能です(Bは誤り)。改名後も定義ファイルは databricks.yml のままで、YAML が廃止された事実はありません(Dは誤り)。旧称 DABs のまま出題されても、同じ仕組みを指すと読み替えましょう。