
เวลาเราทำงานบน Databricks กันจริง ๆ ส่วนใหญ่จะไม่ใช่แค่รันโน้ตบุ๊กเล่น ๆ ใน dev อย่างเดียวใช่ไหมครับ พอระบบเริ่มโตขึ้น เราก็ต้องมีทั้ง dev, staging, prod และต้องคอยจัดการ jobs, pipelines, ML models, etc. ให้มันทำงานเหมือนกันทุก environment
ถ้าเราต้องนั่ง config ทีละจุดใน UI ก็คงปวดหัวพอสมควร แถมเสี่ยงเจอปัญหา “ทำไมของ dev รันได้ แต่ของ prod พัง”
นี่แหละครับคือเหตุผลที่ Databricks Asset Bundles (DAB) ถูกสร้างขึ้นมา
มันคือวิธีแบบ Infrastructure-as-Code (IaC) สำหรับ Databricks ที่ช่วยให้เราเขียน config ทุกอย่างไว้ใน Git แล้ว deploy ออกมาได้เหมือนเดิมทุกครั้ง
พูดง่าย ๆ คือ แค่มี ไฟล์ YAML กำหนด resource เอาไว้ → กด deploy → Databricks ก็จะสร้าง jobs/pipelines ให้เหมือนกันเป๊ะ ๆ ในทุก environment
Databricks Asset Bundles คืออะไร?
Asset Bundle คือไฟล์ YAML ที่ใช้กำหนด resource ที่เราต้องการ เช่น
- Jobs
- Pipelines
- Volumes and schemas
- etc.
ไฟล์ bundle.yml ตัวอย่าง
bundle:
name: my-sample-bundle
resources:
jobs:
daily-sales-job:
name: "Daily Sales Report"
tasks:
- task_key: run-notebook
notebook_path: ./notebooks/sales_report
compute:
type: serverless
แทนที่จะต้องไปตั้งค่าทุกอย่างผ่าน UI เราสามารถเขียนโครงสร้างไว้เป็นไฟล์ YAML แล้วให้ DAB จัดการ deploy ให้ตามที่เรากำหนดไว้ได้เลย
databricks bundle validate
databricks bundle deploy
databricks bundle run daily-sales-job
เริ่มต้นใช้งาน Databricks Asset Bundles
1. ติดตั้ง Databricks CLI
pip install databricks-cli --upgrade
2. ตรวจสอบการติดตั้ง Databricks CLI
databricks --version
3. สร้าง Bundle
databricks bundle init
เลือก template ของ bundle ที่ต้องการ (เช่น default-python).
ตัวอย่าง Use Case : Deploy ไปที่ dev, staging, prod
โครงสร้างไฟล์ของ Asset Bundles:
├─ databricks.yml
├─ targets/
│ ├─ dev.yml
│ ├─ stg.yml
│ └─ prod.yml
└─ resources/
└─ jobs.yml
databricks.yml
bundle:
name: my-lakehouse
include:
- targets/*.yml
- resources/*.yml
ตัวอย่างไฟล์ targets:
targets/dev.yml
targets:
prod:
workspace:
host: https://adb-222222222222.11.azuredatabricks.net
root_path: /Shared/bundles/my-lakehouse/dev
run_as:
service_principal_name: spn-my-lakehouse-dev
variables:
env: dev
uc_catalog: dev_catalog
targets/prod.yml
targets:
prod:
workspace:
host: https://adb-333333333333.12.azuredatabricks.net
root_path: /Shared/bundles/my-lakehouse/prod
run_as:
service_principal_name: spn-my-lakehouse-prod
variables:
env: prod
uc_catalog: prod_catalog
ตัวอย่างไฟล์ resources:
resources/jobs.yml
resources:
jobs:
etl_daily:
name: etl-daily-${var.env}
tasks:
- task_key: run
notebook_path: ./notebooks/etl_daily
compute:
type: serverless
task_parameters:
- name: UC_CATALOG
value: ${var.uc_catalog}
เตรียม code ด้านบนเสร็จแล้ว ก็ deploy ด้วย command ตามนี้ได้เลย
databricks bundle deploy --target dev
databricks bundle deploy --target stg
databricks bundle deploy --target prod
Asset Bundles : จุดที่โดดเด่นหลังได้ลองใช้งานจริง
- ความสม่ำเสมอ (Consistency) → มั่นใจได้ว่า dev, staging, prod จะใช้งานได้เช่นเดียวกัน
- ควบคุมเวอร์ชั่น (Version Control) → เก็บข้อมูลการเปลี่ยนแปลงไว้ใน Git พร้อม rollback ได้เสมอหากมีข้อผิดพลาด
- การกำกับดูแล (Governance) → ด้วยมาตรฐาน IaC ทำให้สามารถตรวจสอบการและจัดการได้ง่าย
- Automation → รองรับการทำงานอัตโนมัติร่วมกับ CI/CD pipeline
นำไปใช้งานร่วมกับ CI/CD

ตัวอย่าง Databricks Job ที่ถูก Deploy ด้วย Asset Bundles (DAB)
สรุป
Asset Bundles คือเครื่องมือที่จะช่วยให้ชีวิตเราบน Databricks ง่ายขึ้นเยอะ ไม่ต้องมานั่งคลิก ๆ config ใน UI แล้วลุ้นว่าของ dev จะเหมือน prod ไหม
เราก็แค่เขียนไฟล์ bundle ไว้ใน repo เดียวกัน จากนั้นก็เลือก target ว่าจะ deploy ไป dev, staging, หรือ prod ทุกอย่างก็ไปตาม script แบบชัวร์ ๆ
ใครที่ยังใช้วิธี manual สร้างผ่าน UI อยู่ ลองขยับมาใช้ Asset Bundles ดูครับ จะเห็นเลยว่ามันช่วยให้งานเราดูเป็นระบบมากขึ้น และที่สำคัญคือคุณจะ deploy ไป production ได้อย่างมั่นใจมากขึ้นแน่นอน