Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette page présente un bundle complet de bundles d’automatisation déclarative pour un projet Lakebase avec mise à l’échelle automatique prêt pour la production, incluant les fonctionnalités les plus couramment utilisées :
- Branche de production protégée
- Point de terminaison de haute disponibilité en lecture-écriture avec des réplicas secondaires lisibles
- Autorisation
CAN_MANAGEau niveau de l’espace de travail définie en ligne pour un principal de service - Streaming continu de tables synchronisées à partir du catalogue Unity
- Liaison Unity Catalog pour la base de données Lakebase
- Databricks App connecté au projet Lakebase
Pour une introduction pas à pas à Declarative Automation Bundles avec Lakebase, consultez Gérer Lakebase avec Declarative Automation Bundles.
Prerequisites
Avant de commencer, vous avez besoin des éléments suivants :
- Databricks CLI v1.0.0 ou version ultérieure. Pour vérifier votre version, exécutez
databricks --version. Pour installer ou mettre à niveau, consultez Installer ou mettre à jour l’interface CLI Databricks. - Un espace de travail Azure Databricks avec Lakebase activé.
- Un principal de service configuré pour l’authentification de machine à machine (M2M) OAuth. Le bundle accorde à ce principal l’autorisation
CAN_MANAGEau niveau de l’espace de travail sur le projet. Consultez Autoriser l’accès du principal de service à Azure Databricks avec OAuth et Gérer les autorisations de projet. - Table Delta du catalogue Unity avec le flux de données de modification (CDF) activé, à utiliser comme source de synchronisation. Supprimez les blocs
postgres_synced_tablesetpostgres_catalogssi vous n’avez pas besoin de synchronisation des données.
Configuration complète de l’offre groupée
Le bundle utilise des variables pour toutes les valeurs spécifiques à l’espace de travail. Définissez-les dans un .databricks/bundle/<target>/variables.json fichier ou transmettez-les au moment du déploiement avec --var.
Lorsque vous créez un projet, Azure Databricks crée automatiquement une production branche, un point de terminaison en lecture-écriture, un primary rôle Postgres propriétaire lié à votre identité et une databricks_postgres base de données. Pour configurer ces ressources créées implicitement, déclarez-les avec 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
Chaque projet Lakebase crée automatiquement une databricks_postgres base de données appartenant à un rôle Postgres lié à votre identité. Ce bundle crée une base de données nommée distincte (${var.database_name}) détenue par un rôle d’application dédié pour isoler les données d’application à la place. Pour utiliser directement la base de données implicite et le rôle, supprimez les blocs de ressources postgres_roles et postgres_databases, définissez directement postgres_database: databricks_postgres sur postgres_synced_tables et postgres_catalogs, et mettez à jour la ressource de l’application en database: ${resources.postgres_branches.production.name}/databases/databricks-postgres.
Pour placer plutôt le rôle implicite de propriétaire et la base de données databricks_postgres sous la gestion du bundle, déclarez-les avec replace_existing: true à l’aide de leurs identifiants existants. L’ID de base de données est toujours databricks-postgres. L’ID de rôle est dérivé de votre identité Databricks plutôt que d’être un nom fixe. Recherchez-le en premier :
databricks postgres list-roles projects/<project-id>/branches/production
Déclarez ensuite les deux ressources, correspondant à chaque champ déjà défini sur le rôle. Omettre membership_roles supprime l’appartenance DATABRICKS_SUPERUSER du rôle lorsqu’il est adopté, alors déclarez-la explicitement :
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
Pour supprimer les ressources créées par ce bundle, exécutez databricks bundle destroy -t prod. Par défaut, le projet est supprimé de manière réversible et conservé pendant 7 jours avant la suppression définitive. Vous pouvez donc le récupérer pendant la période de rétention. Pour supprimer uniquement le projet immédiatement, utilisez la CLI Databricks avec --purge, ou décommentez purge_on_delete: true dans la ressource du projet ci-dessus pour le supprimer définitivement à chaque destruction :
databricks postgres delete-project projects/<project-id> --purge
Appliquer l’offre groupée
Valider et déployer :
databricks bundle validate -t prod
databricks bundle deploy -t prod
Si databricks bundle deploy ne se termine pas lors de la première exécution, exécutez-le de nouveau.
Ce qui est déployé
Le bundle crée les ressources suivantes :
- Projet de mise à l’échelle automatique Lakebase avec les valeurs par défaut de calcul que vous avez spécifiées.
- Une branche
productionprotégée. - Un point de terminaison principal en lecture/écriture avec haute disponibilité et secondaires en lecture.
- Pipeline de synchronisation continue qui diffuse une table Delta du catalogue Unity dans la base de données du projet.
- Catalogue Unity soutenu par la base de données Lakebase, interrogeable en tant que données du catalogue Unity.
- Une application Databricks connectée à la base de données du projet.
- Autorisation d’espace de travail
CAN_MANAGEpour le principal de service que vous avez spécifié.
Ressources supplémentaires
- L’article Haute disponibilité présente les modèles de haute disponibilité et les cas d’usage en production.
- L'article Traiter des données lakehouse avec des tables synchronisées décrit les options de planification et la gestion des pipelines.
- La gestion des autorisations de projet couvre les contrôles d’accès au niveau de l’espace de travail et de base de données.
- Connecter une application Databricks personnalisée à Lakebase montre comment connecter Databricks Apps à des projets de mise à l’échelle automatique.
- Les ressources des bundles d’automatisation déclarative fournissent la référence complète des ressources des bundles d’automatisation déclarative.