Databricks Certified Data Engineer Associate 教科書
第5章 CI/CDの実装(Implementing CI/CD, 10%)
🎯 この節の学習目標
databricks bundle validate / deploy / run / destroy)の役割と使い分けを説明できる5-2 で学んだ Automation Bundle(旧 Databricks Asset Bundles)を実際にデプロイ・実行するための道具が Databricks CLI です(各ページ初出の対応関係として、Git 連携は Databricks Git Folders〈旧 Repos〉が担います)。CLI はローカル端末でも CI/CD の実行環境でも同じように動くため、「開発者が手元で試したコマンドを、そのまま自動化パイプラインに書ける」のが特長です。Bundle 操作の基本コマンドは次の4つです。
| コマンド | 役割 | 使う場面 |
|---|---|---|
databricks bundle validate | databricks.yml の構文・構成を検証する(デプロイはしない) | PR 時の自動チェック、デプロイ前の事前確認 |
databricks bundle deploy | Bundle の資産(ジョブ・パイプライン・コード)を対象ワークスペースへデプロイする | dev への展開、マージ後の test / prod への昇格 |
databricks bundle run | デプロイ済みのジョブやパイプラインを実行する | デプロイ後の動作確認、テスト用ジョブの起動 |
databricks bundle destroy | Bundle でデプロイした資産を対象環境から削除する | 検証環境の後片付け、プロジェクト廃止時 |
いずれのコマンドも --target(または -t)でデプロイ先ターゲットを指定します。5-2 の databricks.yml に定義した targets(dev / test / prod)がここで効きます。
試験問題では「Databricks Asset Bundles(DABs)を CLI でデプロイする」のように旧称のまま出題される可能性があります。また、Bundle に含まれるパイプラインが旧称 Delta Live Tables、Git 連携が旧称 Databricks Repos と表記されることもあります。いずれもコマンド体系は本節と同じ databricks bundle ... なので、名称の読み替えだけで対応できます。
現行名称は Declarative Automation Bundles / Automation Bundle ですが、CLI のコマンド名は改名後も databricks bundle のままです。validate / deploy / run / destroy のサブコマンド、--target による環境指定も従来どおりで、旧称時代に書かれた CI/CD パイプラインはそのまま動作します。
💡 具体例:手元での典型的な操作の流れ
# 1. 構成の検証(デプロイ前に必ず実行する習慣をつける)
databricks bundle validate
# 2. dev 環境へデプロイ(databricks.yml で default: true なら --target 省略可)
databricks bundle deploy --target dev
# 3. デプロイしたジョブを実行して動作確認
databricks bundle run daily_sales_job --target dev
# 4. 検証が終わった一時環境の資産を削除
databricks bundle destroy --target dev
validate は「YAML の書き間違い・必須項目の欠落・変数解決の失敗」をデプロイ前に検出する門番です。デプロイして初めてエラーに気づくのではなく、validate を CI の最初の段に置いて早期に失敗させるのが定石です。
開発者が手元で CLI を使うときは自分のユーザー認証で構いませんが、CI/CD パイプラインからの操作は個人アカウントに依存させないのが原則です。担当者の退職や権限変更でパイプラインが止まるのを防ぐため、自動化にはサービスプリンシパル(自動処理専用の ID)を使います。
DATABRICKS_HOST(ワークスペース URL)と認証情報(OAuth M2M なら DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET、PAT なら DATABRICKS_TOKEN)を環境変数で渡す。CLI はこれらを自動的に読み取って認証する📝 試験のポイント
「CI/CD パイプラインから Databricks へデプロイする際の認証として適切なのは?」→ 正解の方向性は「サービスプリンシパルの認証情報を CI/CD のシークレット機能に保存し、環境変数経由で CLI に渡す」です。「開発者個人のトークンをリポジトリのコードにハードコードする」「パスワードを YAML に書く」といった選択肢は、セキュリティと継続性の両面で誤答になります。
5-1 の開発フロー(feature ブランチ → PR → main へマージ)に、CLI による Bundle 操作を接続すると、CI/CD パイプラインが完成します。典型的な構成は次のとおりです。
databricks bundle validate を自動実行し、構成の誤りをマージ前に検出するdatabricks bundle deploy --target test で test 環境へ自動デプロイし、bundle run で統合テスト用ジョブを実行するdatabricks bundle deploy --target prod で本番へ昇格する💡 具体例:GitHub Actions ワークフローの骨格
# .github/workflows/deploy.yml(骨格のみ)
name: deploy-bundle
on:
pull_request: # PR では検証のみ
push:
branches: [main] # main マージで test へデプロイ
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: databricks/setup-cli@main # Databricks CLI を導入
- run: databricks bundle validate
env:
DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN }} # サービスプリンシパルのトークン
deploy_test:
if: github.ref == 'refs/heads/main'
needs: validate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: databricks/setup-cli@main
- run: databricks bundle deploy --target test
env:
DATABRICKS_HOST: ${{ secrets.TEST_HOST }}
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_TEST }}
- run: databricks bundle run integration_test_job --target test
env:
DATABRICKS_HOST: ${{ secrets.TEST_HOST }}
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_TEST }}
deploy_prod:
needs: deploy_test
environment: production # 手動承認ステップを設定した environment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: databricks/setup-cli@main
- run: databricks bundle deploy --target prod
env:
DATABRICKS_HOST: ${{ secrets.PROD_HOST }}
DATABRICKS_TOKEN: ${{ secrets.SP_TOKEN_PROD }}
認証情報はすべて GitHub の Secrets に置き、環境変数で CLI に渡しています(この例は PAT 方式。OAuth M2M なら DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET を渡します)。prod への昇格は environment: production の承認設定により、人間の承認を経てから実行されます。なお例では簡潔さのため databricks/setup-cli@main を参照していますが、実運用ではアクションのバージョンを固定(例:@v1 のようなタグや commit SHA へのピン留め)することが推奨されます。
第5章で学んだ3つの部品(Git Folders・Automation Bundle・CLI)を組み合わせると、昇格フローは次のようにつながります。
図:dev → test → prod の昇格フロー(Git Folders + Automation Bundle + CLI)
この構成の要点は、どの環境にも「同じ databricks.yml から、同じ deploy コマンドで」デプロイしていることです。環境ごとの違いは --target の指定と Secrets(接続先・認証情報)だけに閉じ込められており、5-2 で学んだ「コードは1つ、設定は環境ごと」が CLI レベルでも貫かれています。
✅ この節のまとめ
validate(検証)・deploy(展開)・run(実行)・destroy(削除)。環境は --target で指定する。validate はデプロイせずに構成を検証する門番。CI の最初の段に置いて早期に失敗させる。DATABRICKS_HOST / DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET 等)で CLI に渡す。個人アカウント依存やハードコードは避ける。問1. CI パイプラインで、Automation Bundle の databricks.yml に構成ミスがないかを「デプロイせずに」チェックしたい。使用すべきコマンドはどれか。
正解:B
validate は Bundle 定義の構文・構成をデプロイせずに検証するコマンドで、PR 時の自動チェックに最適です。Aの deploy は実際に資産を展開してしまうため「デプロイせずに」という要件に反します。Cの run はデプロイ済みジョブの実行、Dの destroy は資産の削除で、いずれも検証の用途ではありません。
問2. databricks.yml に dev / test / prod の3つの targets が定義されている。CI/CD パイプラインから test 環境へデプロイするコマンドとして正しいものはどれか。
正解:A
デプロイ先の環境は deploy コマンドに --target(または -t)で指定します。Bの run はデプロイではなくジョブの実行であり、オプション名も誤りです。Cの validate は検証のみでデプロイしません。Dはターゲット指定を省略すると default: true のターゲット(通常は dev)が使われるため、test へは展開されません。
問3. CI/CD パイプラインから Databricks へデプロイする際の認証方法として、最も適切なものはどれか。
正解:B
自動化にはサービスプリンシパル(自動処理専用の ID)を使い、認証情報は Secrets に保存して環境変数経由で CLI に渡すのが原則です。なお認証方式としては、PAT よりも OAuth M2M(DATABRICKS_CLIENT_ID / DATABRICKS_CLIENT_SECRET)が第一候補として推奨されます。Aは認証情報の漏えいリスクに加え、個人アカウント依存(退職・権限変更で停止)の問題があります。Cは手動介入が必要で自動化になりません。Dはセキュリティとガバナンスの放棄であり論外です。
問4. チームは「PR 作成時に構成を検証し、main へのマージで test 環境に自動デプロイして統合テストを実行、リリース承認後に prod へ昇格する」フローを構築したい。各段階で使う仕組みの組み合わせとして最も適切なものはどれか。
正解:B
「検証は validate、環境への展開は deploy(--target で環境指定)、ジョブの実行は run」という役割に沿った組み合わせはBだけです。Aは PR の段階で prod へデプロイしてしまい、承認後に資産を削除するという逆転した構成です。Cはデプロイが手動なので再現性のある自動化になりません。Dは PR で資産を削除し、prod へのデプロイをどこでも行っていないため、フローとして成立しません。