Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Op deze pagina ziet u een volledige declaratieve Automation Bundles-bundel voor een automatisch schalend Lakebase-project met de meest gebruikte functies:
- Beveiligde productiebranch
- Eindpunt voor lezen en schrijven met hoge beschikbaarheid (HA) en leesbare secundaire replica’s
- Machtiging op inline-werkruimteniveau
CAN_MANAGEvoor een service-principal - Continue gesynchroniseerde tabelstreaming vanuit Unity Catalog
- Unity Catalog-binding voor de Lakebase-database
- Databricks App verbonden met het Lakebase-project
Voor een stapsgewijze inleiding tot declaratieve Automation-bundels met Lakebase raadpleegt u Lakebase beheren met declaratieve Automation-bundels.
Prerequisites
Voordat u begint, hebt u het volgende nodig:
- Databricks CLI v1.0.0 of hoger. Voer de opdracht uit
databricks --versionom uw versie te controleren. Zie De Databricks CLI installeren of bijwerken om deze te installeren of bij te werken. - Een Azure Databricks werkruimte waarvoor Lakebase is ingeschakeld.
- Een service-principal die is geconfigureerd voor OAuth-machine-to-machine (M2M)-authenticatie. De bundel verleent deze principal-werkruimte
CAN_MANAGEtoestemming voor het project. Zie Service-principaltoegang tot Azure Databricks autoriseren met OAuth - en projectmachtigingen beheren. - Een Unity Catalog Delta-tabel met CDF (Change Data Feed) ingeschakeld voor gebruik als de synchronisatiebron. Verwijder de
postgres_synced_tablesenpostgres_catalogsblokken als u geen gegevenssynchronisatie nodig hebt.
Configuratie van bundel voltooien
De bundel maakt gebruik van variabelen voor alle werkruimtespecifieke waarden. Stel ze in een .databricks/bundle/<target>/variables.json bestand in of geef ze door tijdens de implementatie met --var.
Wanneer u een project maakt, maakt Azure Databricks automatisch een production vertakking, een primary eindpunt voor lezen/schrijven, een postgres-rol van eigenaar die is gekoppeld aan uw identiteit en een databricks_postgres database. Als u deze impliciet gemaakte resources wilt configureren, declareert u ze met 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
Opmerking
Elk Lakebase-project maakt automatisch een databricks_postgres database die eigendom is van een Postgres-rol die is gekoppeld aan uw identiteit. Met deze bundel maakt u een afzonderlijke benoemde database (${var.database_name}) die eigendom is van een toegewezen app-rol om in plaats daarvan app-gegevens te isoleren. Als u de impliciete database en rol rechtstreeks wilt gebruiken, verwijdert u de resourceblokken postgres_roles en postgres_databases, stelt u postgres_database: databricks_postgres rechtstreeks in op postgres_synced_tables en postgres_catalogs, en werkt u de app-resource bij naar database: ${resources.postgres_branches.production.name}/databases/databricks-postgres.
Als u de impliciete eigenaarsrol en databricks_postgres -database onder bundelbeheer wilt brengen, declareert u deze met replace_existing: true behulp van hun bestaande id's. De database-id is altijd databricks-postgres. De rol-id wordt afgeleid van uw Databricks-identiteit in plaats van een vaste naam te zijn, dus zoek deze eerst op:
databricks postgres list-roles projects/<project-id>/branches/production
Declareer vervolgens beide resources, die overeenkomen met elk veld dat al is ingesteld voor de rol. Door membership_roles weg te laten, wordt het lidmaatschap van DATABRICKS_SUPERUSER uit de rol verwijderd wanneer deze wordt aangenomen, dus specificeer het expliciet:
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
Opmerking
Als u de resources wilt verwijderen die door deze bundel worden gemaakt, voert u de opdracht uit databricks bundle destroy -t prod. Standaard wordt het project voorlopig verwijderd en gedurende 7 dagen vóór permanente verwijdering bewaard, zodat u het tijdens de bewaarperiode kunt herstellen. Om alleen het project onmiddellijk te verwijderen, gebruikt u de Databricks CLI met --purge, of haalt u de opmerkingen bij purge_on_delete: true weg in de projectresource hierboven om het bij elke destroy definitief te verwijderen:
databricks postgres delete-project projects/<project-id> --purge
De bundel toepassen
Valideren en implementeren:
databricks bundle validate -t prod
databricks bundle deploy -t prod
Als databricks bundle deploy bij de eerste uitvoering niet wordt voltooid, voer het dan opnieuw uit.
Wat wordt geïmplementeerd
De bundel maakt de volgende bronnen aan:
- Een Lakebase Autoscaling-project met de standaardwaarden voor berekeningen die u hebt opgegeven.
- Een beveiligde
productionvertakking. - Een primair eindpunt voor lezen/schrijven met hoge beschikbaarheid en leesbare secundaire bestanden.
- Een pijplijn voor continue synchronisatie die een Unity Catalog Delta-tabel naar de projectdatabase streamt.
- Een Unity Catalog-catalogus die is gebaseerd op de Lakebase-database en kan worden bevraagd als gegevens in Unity Catalog.
- Een Databricks-app die is verbonden met de projectdatabase.
- Werkruimtemachtiging
CAN_MANAGEvoor de service-principal die u hebt opgegeven.
Aanvullende informatiebronnen
- Hoge beschikbaarheid behandelt patronen voor hoge beschikbaarheid en wanneer deze in productie worden gebruikt.
- Serve lakehouse-gegevens met gesynchroniseerde tabellen hebben betrekking op planningsopties en pijplijnbeheer.
- Projectmachtigingen beheren heeft betrekking op toegangsbeheer op werkruimte- en databaseniveau.
- Een aangepaste Databricks-app verbinden met Lakebase laat zien hoe u Databricks-apps verbindt met projecten voor automatisch schalen.
- Bundelresources voor declaratieve automatisering bevat de volledige naslag voor bundelresources voor declaratieve automatisering.