
目次
はじめに
GLB事業部Lakehouse部のティダです。
前回の記事では、Terraform を使用した Databricks リソースのデプロイの自動化について紹介しました。
前編の記事はこちらです。
https://techblog.ap-com.co.jp/draft/entry/PIuJdBvdBPoiP8oI7p6Ql5FXjxg
今回はその第2弾として、Terraform × Docker Image × Databricks をテーマに、より実践的な環境構築から検証手順、
さらに CI/CD パイプラインまでを解説します。
特に本記事では以下をカバーします:
-
Docker イメージを利用した Databricks クラスタのカスタマイズ
以下ドキュメントを参考にしています。
Databricks Container Servicesを使用したコンテナーのカスタマイズ | Databricks on AWS -
Terraform による IaC 管理
Databricks Terraformプロバイダー | Databricks on AWS -
検証の進め方
-
CI/CD パイプラインへの統合
Databricks のベストプラクティスと推奨される CI/CD ワークフロー | Databricks on AWS
背景と課題感
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. 検証の進め方
検証では以下を確認します:
-
クラスタが正常に作成されるか
-
Docker イメージのライブラリが利用可能か(例: Notebook で
import pandasが動作する) -
Terraform コードの
terraform apply/destroyで環境が再現可能か
CI/CD への統合
本構成をチーム開発に組み込むには、CI/CD が不可欠です。以下の流れを想定します:
-
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 }}
-
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を用いたデータ分析基盤の導入から内製化支援まで幅広く支援をしております。
もしご興味がある方は、お問い合わせ頂ければ幸いです。
そして、一緒に働いていただける仲間も募集中です!
APCにご興味がある方の連絡をお待ちしております。