Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Important
Stöd för Declarative Automation Bundles för Lakebase är i betaversion.
Den här sidan visar ett komplett Deklarativt Automationspaketpaket för ett produktionsklart Lakebase-projekt med de mest använda funktionerna:
- Skyddad produktionsgren
- Slutpunkt för läsning och skrivning med hög tillgänglighet (HA) och läsbara sekundära repliker
- Inlinebehörighet på arbetsytenivå för ett
CAN_MANAGEtjänsthuvudnamn - Kontinuerlig synkronisering av tabellströmning från Unity Catalog
- Unity Catalog-bindning för Lakebase-databasen
- Databricks-appen är ansluten till Lakebase-projektet
En stegvis introduktion till deklarativa Automation-paket med Lakebase finns i Hantera Lakebase med deklarativa Automation-paket.
Förutsättningar
Innan du börjar behöver du:
- Databricks CLI v1.0.0 eller senare. Kontrollera din version genom att köra
databricks --version. Information om hur du installerar eller uppgraderar finns i Installera eller uppdatera Databricks CLI. - En Azure Databricks arbetsyta med Lakebase aktiverat.
- Ett tjänsthuvudnamn som har konfigurerats för OAuth-autentisering från dator till dator (M2M). Paketet ger den här huvudarbetsytan
CAN_MANAGEbehörighet för projektet. Se Auktorisera tjänstens huvudnamnsåtkomst till Azure Databricks med OAuth och Hantera projektbehörigheter. - En Delta-tabell i Unity Catalog med CDF (Change Data Feed) aktiverad för användning som synkroniseringskälla. Ta bort blocken
postgres_synced_tablesochpostgres_catalogsom du inte behöver datasynkronisering.
Fullständig paketkonfiguration
Paketet använder variabler för alla arbetsytespecifika värden. Ange dem i en .databricks/bundle/<target>/variables.json fil eller skicka dem vid distributionstillfället med --var.
När du skapar ett projekt skapar Azure Databricks automatiskt en production gren, en primary skrivskyddad slutpunkt, en postgres-ägarroll som är kopplad till din identitet och en databricks_postgres databas. Om du vill konfigurera dessa implicit skapade resurser deklarerar du dem med replace_existing: true.
bundle:
name: lakebase-typical-project
variables:
project_id:
description: 'Lakebase project ID (lowercase, hyphen-delimited)'
default: 'my-lakebase-project'
display_name:
description: 'Human-readable project name shown in the UI'
default: 'My Lakebase project'
pg_version:
description: 'Postgres major version'
default: 17
min_cu:
description: 'Minimum compute units on the default endpoint'
default: 0.5
max_cu:
description: 'Maximum compute units on the default endpoint'
default: 4.0
suspend_timeout:
description: 'Idle time before the default endpoint suspends. Ignored when no_suspension is true.'
default: '300s'
admin_sp_app_id:
description: 'Application ID of the service principal to grant CAN_MANAGE on the project'
default: '<your-sp-application-id>'
source_table:
description: 'Unity Catalog three-part name of the Delta table to sync (catalog.schema.table)'
default: '<catalog>.<schema>.<table>'
primary_key_column:
description: 'Primary key column of the source Delta table'
default: '<pk>'
storage_catalog:
description: 'Unity Catalog catalog where the sync pipeline stores its metadata'
default: '<catalog>'
storage_schema:
description: 'Unity Catalog schema where the sync pipeline stores its metadata'
default: '<schema>'
app_name:
description: 'Databricks App name (must be unique in the workspace)'
default: 'my-lakebase-app'
uc_catalog_id:
description: 'Name to register the Lakebase database in Unity Catalog'
default: 'my_lakebase_uc_catalog'
database_name:
description: 'Postgres-internal name for the app database'
default: 'app_database'
targets:
prod:
default: true
workspace:
host: https://<your-workspace>.cloud.databricks.com
resources:
# Project — top-level container for branches, endpoints, and databases.
# The permissions block grants workspace-level CAN_MANAGE to the service principal.
postgres_projects:
lakebase_project:
project_id: ${var.project_id}
# purge_on_delete: true # Uncomment to permanently delete on destroy (default: soft delete, 7-day retention).
pg_version: ${var.pg_version}
display_name: ${var.display_name}
default_endpoint_settings:
autoscaling_limit_min_cu: ${var.min_cu}
autoscaling_limit_max_cu: ${var.max_cu}
suspend_timeout_duration: ${var.suspend_timeout}
permissions:
- service_principal_name: ${var.admin_sp_app_id}
level: CAN_MANAGE
# Configure the implicitly created production branch as protected.
postgres_branches:
production:
branch_id: production
parent: ${resources.postgres_projects.lakebase_project.name}
no_expiry: true
is_protected: true
replace_existing: true
# Configure the implicitly created primary endpoint with HA.
# HA requires no_suspension: true. group.min: 2 adds a standby for automatic failover.
postgres_endpoints:
primary:
endpoint_id: primary
parent: ${resources.postgres_branches.production.name}
endpoint_type: ENDPOINT_TYPE_READ_WRITE
autoscaling_limit_min_cu: ${var.min_cu}
autoscaling_limit_max_cu: ${var.max_cu}
no_suspension: true
group:
min: 2
max: 2
enable_readable_secondaries: true
replace_existing: true
# Postgres role that owns the app database.
postgres_roles:
app_role:
role_id: app-role # Resource ID: lowercase letters, digits, and hyphens.
parent: ${resources.postgres_branches.production.name}
postgres_role: app_role # Postgres identifier: lowercase letters, digits, and underscores.
# Named Postgres database for the app.
postgres_databases:
app_db:
database_id: app-database
parent: ${resources.postgres_branches.production.name}
postgres_database: ${var.database_name}
role: ${resources.postgres_roles.app_role.id}
# Sync a Unity Catalog Delta table into the project continuously.
postgres_synced_tables:
orders_sync:
synced_table_id: '${var.storage_catalog}.${var.storage_schema}.orders_synced'
branch: ${resources.postgres_branches.production.name}
postgres_database: ${var.database_name}
source_table_full_name: ${var.source_table}
primary_key_columns:
- ${var.primary_key_column}
scheduling_policy: CONTINUOUS
create_database_objects_if_missing: true
new_pipeline_spec:
storage_catalog: ${var.storage_catalog}
storage_schema: ${var.storage_schema}
# Bind the Lakebase database into Unity Catalog so it is queryable as UC data.
postgres_catalogs:
lakebase_uc_catalog:
catalog_id: ${var.uc_catalog_id}
postgres_database: ${var.database_name}
branch: ${resources.postgres_branches.production.name}
create_database_if_missing: true
# Databricks App connected to the project.
# Update source_code_path to point to your app source directory.
apps:
lakebase_app:
name: ${var.app_name}
description: 'App backed by Lakebase autoscaling'
source_code_path: ./app_src
config:
command:
- flask
- run
- --host=0.0.0.0
- --port=8000
resources:
- name: lakebase-db
postgres:
branch: ${resources.postgres_branches.production.name}
database: ${resources.postgres_databases.app_db.name}
permission: CAN_CONNECT_AND_CREATE
Note
Varje Lakebase-projekt skapar automatiskt en databricks_postgres databas som ägs av en Postgres-roll som är kopplad till din identitet. Det här paketet skapar i stället en separat namngiven databas (${var.database_name}) som ägs av en dedikerad programroll för att isolera programdata. Om du vill använda den implicita databasen och rollen direkt tar du bort resursblocken postgres_roles och postgres_databases , ställer in postgres_database: databricks_postgres direkt på postgres_synced_tables och postgres_catalogsoch uppdaterar appresursen till database: ${resources.postgres_branches.production.name}/databases/databricks-postgres.
För att i stället låta den implicita ägarrollen och databasen databricks_postgres hanteras av pakethantering deklarerar du dem med replace_existing: true med deras befintliga ID:n. Databas-ID:t är alltid databricks-postgres. Roll-ID:t härleds från din Databricks-identitet i stället för att vara ett fast namn, så leta upp det först:
databricks postgres list-roles projects/<project-id>/branches/production
Deklarera sedan båda resurserna och matcha alla fält som redan har angetts för rollen. Om du utelämnar membership_rolesDATABRICKS_SUPERUSER tas medlemskapet bort från rollen när det antas, så deklarera det uttryckligen:
postgres_roles:
owner:
role_id: <role-id-from-list-roles>
parent: ${resources.postgres_branches.production.name}
postgres_role: user@databricks.com # Or the service principal application ID.
identity_type: USER # Or SERVICE_PRINCIPAL.
membership_roles:
- DATABRICKS_SUPERUSER
replace_existing: true
postgres_databases:
databricks_postgres:
database_id: databricks-postgres
parent: ${resources.postgres_branches.production.name}
postgres_database: databricks_postgres
role: ${resources.postgres_roles.owner.id}
replace_existing: true
Note
Om du vill ta bort de resurser som skapas i det här paketet kör du databricks bundle destroy -t prod. Som standard tas projektet bort mjukt och behålls i 7 dagar före permanent borttagning, så du kan återställa det under kvarhållningsperioden. Om du bara vill ta bort projektet omedelbart, använder du antingen Databricks CLI med --purge eller avkommenterar purge_on_delete: true i projektresursen ovan för att radera det permanent vid varje destroy:
databricks postgres delete-project projects/<project-id> --purge
Använd paketet
Verifiera och distribuera:
databricks bundle validate -t prod
databricks bundle deploy -t prod
Om databricks bundle deploy inte slutförs första gången, kör det igen.
Vad driftsätts
Paketet skapar följande resurser:
- Ett Lakebase-projekt med de beräkningsstandardinställningar du angav.
- En skyddad
productiongren. - En primär läs- och skrivslutpunkt med HA och läsbara sekundärfiler.
- En pipeline för kontinuerlig synkronisering som strömmar en Unity Catalog Delta-tabell till projektdatabasen.
- En Unity Catalog-katalog som backas upp av Lakebase-databasen och som kan köras som Unity Catalog-data.
- En Databricks-app som är ansluten till projektdatabasen.
- Behörighet till arbetsytan
CAN_MANAGEför det tjänsthuvudobjekt som du angav.
Ytterligare resurser
- Hög tillgänglighet behandlar HA-mönster och när de ska användas i produktion.
- Leverera lakehouse-data med synkroniserade tabeller behandlar schemaläggningsalternativ och pipelinehantering.
- Hantera projektbehörigheter omfattar åtkomstkontroller på arbetsytenivå och databasnivå.
- Ansluta en anpassad Databricks-app till Lakebase visar hur du ansluter Databricks-appar till autoskalningsprojekt.
- Deklarativa Automation-paketresurser innehåller den fullständiga resursreferensen för deklarativa Automation-paket.