APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Databricks × Terraform × Docker Image: 実践的な構築と CI/CD パイプライン

目次

はじめに

GLB事業部Lakehouse部のティダです。

前回の記事では、Terraform を使用した Databricks リソースのデプロイの自動化について紹介しました。
前編の記事はこちらです。 https://techblog.ap-com.co.jp/draft/entry/PIuJdBvdBPoiP8oI7p6Ql5FXjxg

今回はその第2弾として、Terraform × Docker Image × Databricks をテーマに、より実践的な環境構築から検証手順、
さらに CI/CD パイプラインまでを解説します。

特に本記事では以下をカバーします:


背景と課題感

Databricks の標準クラスタは柔軟ですが、以下の課題があります:

  • 特定ライブラリや依存関係を毎回インストールするのが面倒

  • 構成管理が手作業になりやすい

  • チーム開発で環境差異が生じやすい

これを解決するアプローチが「Docker イメージによるクラスタベース環境の統一」です。
そして Terraform を用いてコード化することで、環境を再現可能・自動化可能にします。


全体アーキテクチャ

開発者 → GitHub (Dockerfile / Terraform / Notebook) → CI/CD → コンテナレジストリ → Databricks クラスタ (Docker Image)

ポイントは以下です:

  • Dockerfile: Python/R/Scala ライブラリを含むカスタムイメージを定義

  • Terraform: Databricks ワークスペース / クラスタをコード化

  • CI/CD: GitHub Actions / Azure DevOps 等で自動ビルド・デプロイ


前提条件

Databricks Container Service の有効化が必要
Databricks ワークスペースで Container Service 機能が有効になっている必要があります。
これはワークスペース作成時またはワークスペース設定で有効化できます。

手順

1. Docker イメージの作成

FROM databricksruntime/standard:latest
RUN pip install pandas scikit-learn mlflow

これをローカルでビルドし、任意のレジストリ(例: Docker Hub, ACR, GCR)にプッシュします。

docker build -t my-databricks-image:latest .
docker push myregistry/my-databricks-image:latest

2. Terraform でクラスタを定義

resource "databricks_cluster" "custom" {
  cluster_name            = "custom-docker-cluster"
  spark_version           = "13.3.x-scala2.12"
  node_type_id            = "Standard_DS3_v2"
  autotermination_minutes = 60
  num_workers             = 2

  docker_image {
    url = "myregistry/my-databricks-image:latest"
  }
}

3. 検証の進め方

検証では以下を確認します:

  1. クラスタが正常に作成されるか

  2. Docker イメージのライブラリが利用可能か(例: Notebook で import pandas が動作する)

  3. Terraform コードの terraform apply / destroy で環境が再現可能か


CI/CD への統合

本構成をチーム開発に組み込むには、CI/CD が不可欠です。以下の流れを想定します:

  1. GitHub Actions で Docker Build & Push

name: Build and Push Docker Image
on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Login to Registry
        run: echo ${{ secrets.REGISTRY_PASSWORD }} | docker login myregistry.io -u ${{ secrets.REGISTRY_USERNAME }} --password-stdin

      - name: Build Docker image
        run: docker build -t myregistry.io/my-databricks-image:${{ github.sha }} .

      - name: Push Docker image
        run: docker push myregistry.io/my-databricks-image:${{ github.sha }}

  1. Terraform Apply を自動化

name: Deploy Databricks Infra
on:
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Terraform
        uses: hashicorp/setup-terraform@v2
      - name: Terraform Init
        run: terraform init
      - name: Terraform Apply
        run: terraform apply -auto-approve

これにより、

  • main ブランチにマージすると Docker イメージが自動ビルド & プッシュ

  • 必要に応じて Terraform がクラスタを更新

という CI/CD サイクルを構築できます。


まとめ

本記事では、Databricks × Terraform × Docker Image を用いた実践的な構築方法を解説しました。ポイントは以下です:

  • Docker イメージで依存関係を統一し、クラスタ環境を安定化

  • Terraform で環境をコード化し、再現性を確保

  • CI/CD で自動ビルド & デプロイを実現

おわりに

前編・後編で Terraform を用いた Databricks 環境構築の基本的な設定を紹介しましたが、今回取り扱わなかった設定もまだ多く存在します。
たとえば、複雑なジョブ依存関係や詳細なライブラリ管理、ネットワークやセキュリティ周りの設定などです。
すべてのリソースを完全に管理するには、さらに理解を深める必要があると感じました。
興味のある方は、Terraform や Databricks の公式ドキュメントを参照すると、より高度な構成やベストプラクティスを学ぶことができます。
Terraform Registry
本記事を参考に、自分の環境に合わせた Databricks × Terraform × Docker の構築をぜひ試してみてください。

最後までご覧いただきありがとうございます。
私たちはDatabricksを用いたデータ分析基盤の導入から内製化支援まで幅広く支援をしております。
もしご興味がある方は、お問い合わせ頂ければ幸いです。

www.ap-com.co.jp

そして、一緒に働いていただける仲間も募集中です!
APCにご興味がある方の連絡をお待ちしております。

www.ap-com.co.jp