Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Diese Seite zeigt ein vollständiges Bundle für Declarative Automation Bundles für ein produktionsreifes Lakebase-Autoscaling-Projekt mit den am häufigsten verwendeten Funktionen:
- Geschützte Produktionszweige
- Hochverfügbare (HA) Lese-Schreib-Endpunkte mit lesbaren sekundären Instanzen
- Inline-Berechtigung auf Arbeitsbereichsebene
CAN_MANAGEfür einen Dienstprinzipal - Fortlaufendes Synchronisieren von Tabellen aus dem Unity-Katalog
- Unity-Katalogbindung für die Lakebase-Datenbank
- Databricks App, die mit dem Lakebase-Projekt verbunden ist
Eine schrittweise Einführung in deklarative Automatisierungspakete mit Lakebase finden Sie unter Manage Lakebase with Declarative Automation Bundles.
Voraussetzungen
Bevor Sie beginnen, benötigen Sie Folgendes:
- Databricks CLI v1.0.0 oder höher. Führen Sie zum Überprüfen der Version
databricks --versionaus. Informationen zum Installieren oder Aktualisieren finden Sie unter Installieren oder Aktualisieren der Databricks CLI. - Ein Azure Databricks Arbeitsbereich mit aktivierter Lakebase.
- Ein Dienstprinzipal, der für die OAuth-Computer-zu-Computer-Authentifizierung (M2M) konfiguriert ist. Das Bündel gewährt diesem Prinzipalarbeitsbereich
CAN_MANAGEBerechtigungen für das Projekt. Siehe Autorisieren des Dienstprinzipalzugriffs auf Azure Databricks mit OAuth und Verwalten von Projektberechtigungen. - Eine Unity Catalog Delta-Tabelle mit aktiviertem CDF (Change Data Feed) als Synchronisierungsquelle. Entfernen Sie die
postgres_synced_tables- undpostgres_catalogs-Blöcke, wenn Sie keine Datensynchronisierung benötigen.
Vollständige Paketkonfiguration
Das Bündel verwendet Variablen für alle arbeitsbereichspezifischen Werte. Legen Sie sie in einer .databricks/bundle/<target>/variables.json-Datei fest oder übergeben Sie sie bei der Bereitstellung mit --var.
Wenn Sie ein Projekt erstellen, erstellt Azure Databricks automatisch einen production Branch, einen primary Lese-/Schreibendpunkt, eine an Ihre Identität gebundene Postgres-Besitzerrolle und eine databricks_postgres Datenbank. Um diese implizit erstellten Ressourcen zu konfigurieren, deklarieren Sie sie mit 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
Jedes Lakebase-Projekt erstellt automatisch eine databricks_postgres Datenbank, die einer mit Ihrer Identität verknüpften Postgres-Rolle gehört. Dieses Paket erstellt stattdessen eine separate Datenbank mit eigenem Namen (${var.database_name}), die einer dedizierten App-Rolle gehört, um App-Daten zu isolieren. Um die implizite Datenbank und Rolle direkt zu verwenden, entfernen Sie die Ressourcenblöcke postgres_roles und postgres_databases, legen Sie postgres_database: databricks_postgres direkt auf postgres_synced_tables und postgres_catalogs fest und aktualisieren Sie die App-Ressource auf database: ${resources.postgres_branches.production.name}/databases/databricks-postgres.
Um stattdessen die implizite Besitzerrolle und die databricks_postgresDatenbank unter Bundle-Verwaltung zu stellen, deklarieren Sie sie mit replace_existing: true unter Verwendung ihrer vorhandenen IDs. Die Datenbank-ID ist immer databricks-postgres. Die Rollen-ID wird von Ihrer Databricks-Identität abgeleitet, anstatt ein fester Name zu sein. Suchen Sie sie also zuerst nach:
databricks postgres list-roles projects/<project-id>/branches/production
Deklarieren Sie dann beide Ressourcen, die allen bereits für die Rolle festgelegten Feldern entsprechen. Wenn membership_roles weggelassen wird, wird die DATABRICKS_SUPERUSER-Mitgliedschaft bei der Übernahme aus der Rolle entfernt. Geben Sie sie daher explizit an:
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
Führen Sie databricks bundle destroy -t prod aus, um die Ressourcen zu löschen, die dieses Bundle erstellt. Standardmäßig wird das Projekt vorläufig gelöscht und 7 Tage vor dem endgültigen Löschen aufbewahrt, sodass Sie es während des Aufbewahrungszeitraums wiederherstellen können. Um nur das Projekt sofort zu löschen, verwenden Sie die Databricks-CLI mit --purge, oder heben Sie die Auskommentierung von purge_on_delete: true in der obigen Projektressource auf, um es bei jedem Destroy-Vorgang endgültig zu löschen:
databricks postgres delete-project projects/<project-id> --purge
Anwenden des Bündels
Überprüfen und Bereitstellen:
databricks bundle validate -t prod
databricks bundle deploy -t prod
Wenn databricks bundle deploy beim ersten Ausführen nicht abgeschlossen wird, führen Sie es erneut aus.
Was bereitgestellt wird
Das Bundle erstellt die folgenden Ressourcen:
- Ein Lakebase-Autoscaling-Projekt mit den von Ihnen angegebenen Standard-Recheneinstellungen.
- Eine geschützte
productionVerzweigung. - Ein primärer Endpunkt für Lese- und Schreibzugriffe mit HA und lesbaren sekundären Replikaten.
- Eine fortlaufende Synchronisierungspipeline, die eine Unity Catalog Delta-Tabelle in die Projektdatenbank streamt.
- Ein Unity-Katalog, der von der Lakebase-Datenbank unterstützt wird und als Unity-Katalogdaten abgefragt werden kann.
- Eine Databricks-App, die mit der Projektdatenbank verbunden ist.
- Berechtigung für den Arbeitsbereich
CAN_MANAGEfür den von Ihnen angegebenen Dienstprinzipal.
Weitere Ressourcen
- Hohe Verfügbarkeit deckt HA-Muster ab und wann sie in der Produktion verwendet werden sollen.
- Die Bereitstellung von Lakehouse-Daten mit synchronisierten Tabellen umfasst Planungsoptionen und Pipelineverwaltung.
- Verwalten von Projektberechtigungen umfasst Zugriffssteuerungen auf Arbeitsbereichsebene und Datenbankebene.
- Eine benutzerdefinierte Databricks-App mit Lakebase verbinden zeigt, wie Databricks-Apps mit Autoscaling-Projekten verbunden werden.
- Ressourcen für deklarative Automatisierungspakete enthält die vollständige Ressourcenreferenz zu deklarativen Automatisierungspaketen.