Ta i bruk bundles¶
Denne guiden viser hvordan du oppretter, konfigurerer og deployer en bundle til flere Databricks-workspaces. Se Declarative Automation Bundles (konsept) for bakgrunn om targets, modes og wheel-strategier.
Forutsetninger¶
- Databricks CLI installert og autentisert mot workspacet ditt
- uv installert (for wheel-bygging)
- Tilgang til minst ett Databricks-workspace
- Klonet
padda-golden-path-repoet
Opprette en ny bundle fra malen¶
Bruk Padda Asset Bundle Templates til å opprette en ny bundle:
Du blir spurt om Unity Catalog-navn, workspace-host for stage og prod,
domene-navn, domene-beskrivelse og hvilken setup_type du vil bruke (default,
minimal eller tailored). Med default eller tailored se
bundle-templates/README.md
for hva de ulike valgene betyr.
Med setup_type: default genererer malen omtrent denne strukturen:
my-domain/
databricks.yml # Hovedkonfigurasjon med targets
pyproject.toml # Python-prosjekt (uv, ruff, mypy)
resources/
example_job.yml # Jobb på klassisk compute
example_serverless_job.yml # Jobb på serverless compute
example_pipeline_job.yml # Eksempel-pipeline
notebooks/
example_job.py
pipelines/example-pipeline/...
src/
my_domain/
main.py # Python-kode pakket som wheel
Konfigurere targets for stage og prod¶
Sette workspace-host per target¶
Åpne databricks.yml og sett workspace.host for hvert target til riktig
workspace-URL:
targets:
stage:
mode: development
default: true
workspace:
host: https://stage-workspace.cloud.databricks.com
prod:
mode: production
workspace:
host: https://prod-workspace.cloud.databricks.com
root_path: ~/.bundle/${bundle.name}/${bundle.target}
Ikke hardkod workspace-spesifikke stier i jobbdefinisjoner
Bruk variabler for alt som endrer seg mellom flere workspaces — kataloger, schemaer, filstier. Hardkodede verdier bryter når du deployer til et annet miljø.
Sette variabler per target¶
Definer variabler i en variables-blokk på toppnivå, og sett verdiene
eksplisitt for hvert target:
variables:
catalog:
description: Unity Catalog-katalog
schema:
description: Schema for tabeller
targets:
stage:
mode: development
default: true
workspace:
host: https://stage-workspace.cloud.databricks.com
variables:
catalog: dev_catalog
schema: default
prod:
mode: production
workspace:
host: https://prod-workspace.cloud.databricks.com
root_path: ~/.bundle/${bundle.name}/${bundle.target}
variables:
catalog: prod_catalog
schema: production
Referer til variablene i jobbdefinisjoner med ${var.catalog} og
${var.schema}.
Unngå default: for miljøspesifikke variabler
Eksplisitt verdi per target gjør at databricks bundle validate feiler
høylytt hvis du glemmer en variabel i et nytt target. Bruk default: kun
for variabler som er miljøuavhengige (for eksempel en timeout).
Sette root_path, permissions og run_as for prod¶
production-mode krever et eksplisitt root_path (eller at du deployer som
service principal). I tillegg anbefaler vi å definere eierskap med permissions
og run_as, slik at produksjonsressursene ikke er knyttet til en enkelt
utviklers konto. Begge tar service principalens application ID (en UUID), ikke
visningsnavnet:
targets:
prod:
mode: production
workspace:
host: https://prod-workspace.cloud.databricks.com
root_path: ~/.bundle/${bundle.name}/${bundle.target}
run_as:
service_principal_name: <application-id>
permissions:
- service_principal_name: <application-id>
level: CAN_MANAGE
Hvorfor dette root_path-mønsteret?
~/ peker til service principalens hjemområde, så eierskapet til ressursene blir
tydelig. Se
Root path og eierskap i prod
for detaljer.
Deklarere volumes som bundle-ressurser¶
Hvis jobbene dine leser fra og skriver til Unity Catalog Volumes som er tett koblet til koden (input-opplastinger, mellomliggende output, sluttresultater), kan du deklarere volumene som bundle-ressurser i samme repo som jobbene. Da følger volume-definisjonen samme livssyklus som koden, og endringer kan reviewes i samme pull request.
resources:
volumes:
uploads:
catalog_name: ${var.catalog}
schema_name: bronze_default
name: uploads
volume_type: MANAGED
Volumes for team-spesifikk data hører hjemme i team-repoet sammen med koden,
mens kataloger og delte schemas administreres i padda-iac. Se
Ansvarsfordeling mellom bundles og
padda-iac
for full oversikt.
bundle destroy sletter underliggende data
databricks bundle destroy fjerner alle ressurser bundlen eier, inkludert
volumes. Det samme gjelder hvis du endrer name, catalog_name eller
schema_name på et eksisterende volume — bundlen sletter det gamle og oppretter
et nytt. Vær spesielt varsom med volumes som inneholder produksjonsdata, eller
som refereres fra andre systemer (for eksempel en hardkodet S3-sti i et API).
Håndtere Python wheels¶
Ditt eget prosjekt: artifacts-seksjonen¶
Hvis prosjektet ditt har en pyproject.toml, legg til en artifacts-seksjon
som bygger wheelet automatisk ved deploy:
artifacts:
python_artifact:
type: whl
build: uv build --wheel
targets:
stage:
mode: development
default: true
presets:
artifacts_dynamic_version: true
Bruk artifacts_dynamic_version i stage
Uten dette kan clusteret cache en gammel versjon av
wheelet. artifacts_dynamic_version legger til et unikt tidsstempel slik at
clusteret alltid henter siste versjon.
Referer til wheelet i jobbdefinisjonen. På serverless compute deklareres
avhengigheter i en environments-blokk på jobb-nivå, og tasken peker på
environment via environment_key:
resources:
jobs:
my_job:
name: my_job
tasks:
- task_key: my_task
timeout_seconds: 600
python_wheel_task:
package_name: my_project
entry_point: main
parameters:
- "--input-dir=${var.input_dir}"
- "--output-dir=${var.output_dir}"
environment_key: default
environments:
- environment_key: default
spec:
client: "5"
dependencies:
- ../dist/*.whl
spec.client angir versjonen av
serverless-environmentet
— bruk siste versjon.
Flere tasks i samme jobb kan dele én environment_key, eller bruke ulike
environments hvis de trenger forskjellige avhengigheter.
Klassisk compute
Hvis du trenger klassisk compute (for eksempel langtlevende clustere, GPU eller
init-scripts), definerer du job_clusters eller existing_cluster_id på
jobben istedenfor environments, og bruker libraries: på tasken. Se
Klassisk compute (referanse)
for et fullt eksempel.
Tredjepartsbiblioteker¶
Workspacene har ikke tilgang til internett, så clusteret kan ikke hente
avhengigheter fra PyPI (se Hvorfor clustere ikke har
internett
for bakgrunn). For tredjepartsbiblioteker (for eksempel openpyxl) som du ikke
bygger selv, anbefaler vi å vendore wheels inn i bundlen: last dem ned lokalt
før deploy og pakk dem sammen med ditt eget prosjekt.
Last ned avhengighetene til dist/deps/ før deploy:
Pinn versjonen
Bruk eksplisitt versjon (openpyxl==3.1.5) slik at vendor-steget er
reproduserbart. Lockfilen til prosjektet ditt (uv.lock) er sannhetskilden
for hvilken versjon som faktisk brukes.
Plattform-spesifikke wheels
pip download på Mac/Windows kan hente et wheel som ikke kjører på
Databricks (Linux x86_64). Pure-Python-pakker som openpyxl (klassifisert
som py3-none-any) er trygge. For pakker med native kode må du oppgi
plattform eksplisitt — se Laste opp
Python-biblioteker
for kommandoen.
Legg dist/deps/*.whl til som ekstra avhengighet på samme environments-blokk
som ditt eget prosjekt:
environments:
- environment_key: default
spec:
client: "5"
dependencies:
- ../dist/*.whl
- ../dist/deps/*.whl
Alternativ: Unity Catalog Volume
Hvis avhengigheten er stor eller deles på tvers av mange bundles, kan du laste den opp én gang til et Unity Catalog Volume og referere til den med en variabel. Se Laste opp Python-biblioteker. Ulempen er at versjonen ikke følger samme livssyklus som koden — du må huske å oppdatere volumet manuelt når du oppgraderer avhengigheten.
Bygge og deploye¶
Velge CLI-profil¶
Databricks CLI bruker profiler i ~/.databrickscfg for å holde styr på flere
workspace-tilganger. En typisk konfigurasjon for et team med stage og prod ser
slik ut:
[MY_TEAM_STAGE]
host = https://stage-workspace.cloud.databricks.com
auth_type = databricks-cli
[MY_TEAM_PROD]
host = https://prod-workspace.cloud.databricks.com
auth_type = databricks-cli
Logg inn én gang per profil:
I bundle-kommandoer velger du profil med -p:
Bruk -p eksplisitt
Uten -p brukes DEFAULT-profilen, og en uoppmerksom deploy kan havne i
feil workspace.
CI bruker miljøvariabler
I GitHub Actions autentiserer du med OIDC via miljøvariablene
DATABRICKS_AUTH_TYPE=github-oidc og DATABRICKS_CLIENT_ID, ikke profiler. Se
Deploye til produksjon med GitHub Actions.
Validere konfigurasjonen¶
Kjør validate før du deployer for å fange opp feil i YAML-syntaks, manglende variabler og ugyldig konfigurasjon:
Deploye til stage¶
Verifiser i Databricks-workspacet at jobben dukker opp under Workflows. I
development-mode får jobben et prefiks med brukernavnet ditt, for eksempel
[dev ola.nordmann] my_job.
Kjøre en jobb manuelt¶
Deploye til prod¶
CI/CD
I praksis kjører du deploy -t prod fra GitHub Actions med en service
principal — ikke fra din lokale maskin. CI bruker miljøvariabler for
autentisering, så -p-flagget er ikke aktuelt der.
Feilsøking¶
| Symptom | Årsak | Løsning |
|---|---|---|
permission denied ved deploy |
Manglende tilgang til workspace eller feil profil | Sjekk at -p-flagget peker på riktig profil for målet, og at profilen er gyldig (databricks auth login --profile <navn>). |
| Gammel wheel-versjon brukes | Clusteret cacher wheels basert på versjonsnummer | Legg til artifacts_dynamic_version: true i stage-target. I prod: oppgrader versjonen i pyproject.toml. |
ModuleNotFoundError ved kjøring |
Wheelen er ikke tilgjengelig for clusteret | Sjekk at libraries refererer til riktig whl-sti. Sjekk data_security_mode på clusteret (SINGLE_USER eller USER_ISOLATION). |
validate feiler for prod |
production-mode krever eksplisitt root_path eller service principal/run_as |
Sett workspace.root_path i prod-target, for eksempel ~/.bundle/${bundle.name}/${bundle.target}. |
Trenger du hjelp?¶
- Spør i #dig-dataspeilet-support på Slack
- Opprett en issue i padda-golden-path
- Se Declarative Automation Bundles (konsept) for bakgrunn om targets, modes og wheel-strategier
- Se Declarative Automation Bundles (referanse) for konfigurasjonsoversikt og tilgjengelige eksempler