Databricksin resurssipaketeilla hallitut siirtymät ympäristöstä toiseen
Mikä on Databricksin resurssipaketti?
Databricksin resurssipaketit, virallisesti **Declarative Automation Bundles** (aiemmin Databricks Asset Bundles, DABs), ovat Databricksin infrastruktuuri koodina -mekanismi. Niiden avulla tiimit voivat määritellä kaikki Databricks-resurssit — jobit, Spark Declarative Pipelines, ML-mallit, dashboardit, Unity Catalog -skeemoja ja paljon muuta — YAML-konfiguraatiotiedostoina, versioida ne Gitissä ja ottaa ne käyttöön johdonmukaisesti dev-, staging- ja tuotantoympäristöissä.
Ajattele niitä kuin Terraformia, mutta Databricksille räätälöitynä: määrittelet mitä resursseja haluat, ja Databricksin CLI hoitaa loput.
Resurssipaketin ydinperiaatteet
| Periaate | Mitä se tarkoittaa |
|---|---|
| Deklaratiivinen | Kuvaat mitä pitäisi olla olemassa, et miten se luodaan. CLI sovittaa nykyisen tilan haluttuun tilaan. |
| Ympäristötietoinen | Yksi konfiguraatio tukee useita kohdealustoja (dev, staging, prod) ympäristökohtaisilla muuttujaohiteilla. |
| Git-natiivi | Kaikki konfiguraatiot elävät repositoriossa lähdekoodin rinnalla. Haarat, PR:t ja koodikatselmoinnit toimivat normaalisti. |
| Idempotentti | Saman paketin käyttöönotto kahdesti tuottaa saman lopputuloksen — ei duplikaatteja, ei ajautumista. |
Miksi resurssipaketit ratkaisevat oikean ongelman?
Ilman resurssipaketit datatiimit ajautuvat tuttuihin ansoihin:
- Manuaaliset käyttöönotot — joku klikkaa käyttöliittymässä jobin tuotantoon. Ei auditraileja, ei toistettavuutta.
- Ympäristöajautuminen — dev, test ja prod eriytyvät, kun muutoksia tehdään ad hoc. Pipeline toimii devissä mutta hajoaa tuotannossa.
- Hauraita skriptejä — tiimit kirjoittavat REST API -käyttöönottoskriptejä, jotka kasvavat hauraiksi ja ovat yhden insinöörin varassa.
- Ei paluutietä — kun käyttöönotto menee pieleen, ei ole selkeää tapaa palata edelliseen tilaan.
Resurssipaketit ratkaisevat kaikki nämä tekemällä infrastruktuurista toistettavaa, katselmoitavaa ja palautettavaa.
Mitä resursseja paketti voi hallita?
| Resurssityyppi | Mitä se ottaa käyttöön | Tyypillinen käyttötarkoitus |
|---|---|---|
| Jobs | Aikataulutetut tai laukaistavat työnkulut | ETL-pipelinet, datan laadunvalvonta, ML-koulutusajot |
| Pipelines | Spark Declarative Pipelines (SDP) | Medallion-arkkitehtuurin transformaatiot, streaming |
| Model Serving Endpoints | Reaaliaikaiset ML-mallin inferenssiendpointit | Ennusteiden tarjoaminen REST API:n kautta |
| Schemas | Unity Catalog -skeemoja | Taulujen organisointi ympäristökohtaisesti |
| Dashboards | Databricks AI/BI -dashboardit | Operatiivinen monitorointi, liiketoimintaraportointi |
| Quality Monitors | Datan laadunvalvontasäännöt | Automaattinen datan validointi |
| Apps | Databricks Apps | Sovelluskehitysalusta erilaisia kehyksiä käyttäen |
Miten resurssipaketti toimii?
Kansiorakenne
Tyypillinen resurssipakettiprojekti näyttää tältä:
```bash
my-project/
├── databricks.yml # Juurikonfiguraatio
├── resources/
│ ├── jobs.yml # Jobin määrittelyt
│ ├── pipelines.yml # Spark Declarative Pipeline -määrittelyt
│ └── model-serving.yml # ML-mallin tarjoiluendpointit
├── src/
│ ├── notebooks/ # Notebook-lähdekoodit
│ ├── python/ # Python-pyörä- tai skriptilähteet
│ └── sql/ # SQL-kyselytiedostot
└── tests/
└── integration/ # Integraatiotestit
```
Esimerkki: Monivaihteinen ETL-job YAML:lla
```yaml
resources:
jobs:
daily_etl:
name: "Daily Customer ETL — ${var.catalog}"
schedule:
quartz_cron_expression: "0 0 6 * * ?"
timezone_id: "Europe/Helsinki"
job_clusters:
- job_cluster_key: etl_cluster
new_cluster: ${var.default_cluster}
tasks:
- task_key: ingest_raw
job_cluster_key: etl_cluster
notebook_task:
notebook_path: ../src/notebooks/01_ingest_raw.py
- task_key: transform_silver
depends_on:
- task_key: ingest_raw
job_cluster_key: etl_cluster
notebook_task:
notebook_path: ../src/notebooks/02_transform_silver.py
- task_key: aggregate_gold
depends_on:
- task_key: transform_silver
job_cluster_key: etl_cluster
notebook_task:
notebook_path: ../src/notebooks/03_aggregate_gold.py
```
Monien ympäristöjen hallinta
Resurssipaketit loistavat erityisesti monien ympäristöjen hallinnassa. Yksi `databricks.yml`-konfiguraatio voi kohdistua dev-, staging- ja tuotantoympäristöihin ympäristökohtaisilla ohiteilla.
Dev-tila vs. tuotantotila
Dev-tilassa (`mode: development`) CLI automaattisesti:
- Lisää resurssien nimiin etuliitteen `[dev <käyttäjänimi>]` törmäysten välttämiseksi, kun useampi insinööri kehittää samanaikaisesti
- Asettaa klusterit yksisoluisiksi kustannustehokkuuden vuoksi
- Keskeyttää ajoitetut triggerit, jotta dev-jobit eivät aja tuotantoaikataululla
Tuotantotilassa (`mode: production`):
- Resurssien nimet otetaan käyttöön täsmälleen määriteltyinä — ei etuliitteitä
- Käyttöönotto vaatii `run_as`-palvelutilimäärityksen (ei henkilökohtaisia tunnuksia tuotannossa)
- Aikataulut ja triggerit ovat aktiivisina
CI/CD-integraatio
Resurssipaketit on suunniteltu toimimaan CI/CD-putkien kanssa. Tyypillinen käyttöönotto Azure DevOps pipelineja käyttäen voisi näyttää tältä:
```yaml
# Specify the trigger event to start the build pipeline.
trigger:
- main
parameters:
- name: bundle
type: string
default: 'bundles/bundle_A'
values:
- 'bundles/bundle_A'
- 'bundles/bundle_B'
stages:
- stage: Dev
displayName: 'Deploy to Dev Environment'
variables:
- group: 'db-devops-dev'
jobs:
- template: ../templates/validate-deploy-job.yml
parameters:
environment: 'dev'
databricks_host: $(DATABRICKS_HOST)
databricks_client_id: $(DATABRICKS_CLIENT_ID)
databricks_client_secret: $(DATABRICKS_CLIENT_SECRET)
bundle: ${{ parameters.bundle }}
- stage: Test
displayName: 'Deploy to Test Environment'
dependsOn: Dev
variables:
- group: 'db-devops-test'
jobs:
- template: ../templates/validate-deploy-job.yml
parameters:
environment: 'test'
databricks_host: $(DATABRICKS_HOST)
databricks_client_id: $(DATABRICKS_CLIENT_ID)
databricks_client_secret: $(DATABRICKS_CLIENT_SECRET)
bundle: ${{ parameters.bundle }}
- stage: Prod
displayName: 'Deploy to Prod Environment'
dependsOn: Test
variables:
- group: 'db-devops-prod'
jobs:
- template: ../templates/validate-deploy-job.yml
parameters:
environment: 'prod'
databricks_host: $(DATABRICKS_HOST)
databricks_client_id: $(DATABRICKS_CLIENT_ID)
databricks_client_secret: $(DATABRICKS_CLIENT_SECRET)
bundle: ${{ parameters.bundle }}
```
Tuotantokäyttöönotoissa suositaan palvelutilipohjaista autentikointia henkilökohtaisten käyttöoikeustunnisteiden sijaan.
Kenelle tämä sopii?
- Data engineerit: Automatisoi pipelinejen ja jobien käyttöönotto — ei enää manuaalista klikkailua.
- Arkkitehdit ja DevOps - asiantuntijat: Hallitsevat ympäristöjen yhtenäisyyttä ja vähentävät ympäristöjen erilleen ajautumisriskiä.
- Organisaatiot, jotka haluavat skaalata: Siirtävät ratkaisuja luotettavasti alemmista ympäristöistä tuotantoon toistettavalla prosessilla.
Lue lisää ja ota yhteyttä
Haluatko tietää, miten Databricksin resurssipaketit voivat nopeuttaa ja turvata teidän kehitystyötä? Lue lisää palvelustamme ja varaa keskustelu: