Démarrer avec Terraform pour Lakebase
Ce guide vous aide à démarrer avec Terraform pour gérer les Ressources Lakebase à l'aide du fournisseur Databricks Terraform. Vous allez créer un projet, ajouter une Branch de développement et un Endpoint, puis les supprimer une fois terminé. Il s'agit d'un workflow typique pour la gestion des environnements de développement et de test.
Ce guide couvre un sous-ensemble des commandes Terraform disponibles. Pour la référence complète des ressources et toutes les options de configuration disponibles, consultez la documentation du fournisseur Databricks sur le Registre Terraform.
Prérequis
Avant de commencer, vous avez besoin de :
- Terraform installé (version 1,0 ou supérieure). Consultez Installer Terraform.
- Un Service Principal configuré pour l'authentification OAuth machine à machine (M2M) avec l'autorisation CAN MANAGE sur le projet Lakebase. Ce guide nécessite CAN MANAGE (CAN USE est insuffisant car il ne permet pas de créer ou de mettre à jour les Ressources). Voir Autoriser l'accès du Service Principal à Databricks avec OAuth et Gérer les autorisations du projet.
Sémantique Terraform du dimensionnement automatique de Lakebase
Les ressources d'autoscaling de Lakebase utilisent la sémantique Terraform avec des champs spec/status pour la gestion déclarative de l'état. Le champ spec définit l'état souhaité, tandis que le champ status indique l'état actuel.
Important : Détection de drift et modifications en dehors de Terraform
Les modifications apportées aux ressources Lakebase en dehors de Terraform (à l'aide de l'interface utilisateur, de la CLI ou de l'API) ne sont pas détectées par la détection standard de drift de Terraform.
Pour des détails complets sur le fonctionnement des champs spec/status, le comportement de détection de drift et les exigences de gestion de l'état, consultez la documentation de la ressource databricks_postgres_project.
Hiérarchie des ressources
Les ressources Lakebase suivent une hiérarchie parent-enfant : vous créez les ressources parentes avant les enfants, et supprimez les enfants avant les parents. Pour le modèle de ressources complet (projets, branches, computes, bases de données, et plus), consultez les Projets.
Ordre des opérations pour ce guide : Projet → Branch → Endpoint
Démarrage rapide : Gérer un projet Lakebase avec Terraform
Suivez ces étapes pour créer un projet complet et fonctionnel avec une branch de développement et un endpoint compute :
1. Configurer l'authentification
Configurez le fournisseur Databricks pour authentifier l'utilisation du Service Principal que vous avez configuré dans les prérequis. Les ressources Lakebase nécessitent une authentification OAuth, vous définissez donc des variables d'environnement pour les informations d'identification OAuth de votre Service Principal :
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
export DATABRICKS_CLIENT_ID="your-service-principal-client-id"
export DATABRICKS_CLIENT_SECRET="your-service-principal-secret"
Ensuite, configurez votre fournisseur pour utiliser ces variables d'environnement :
terraform {
required_version = ">= 1.0"
required_providers {
databricks = {
source = "databricks/databricks"
version = "~> 1.0"
}
}
}
provider "databricks" {
# Automatically uses DATABRICKS_HOST, DATABRICKS_CLIENT_ID,
# and DATABRICKS_CLIENT_SECRET from environment variables
}
Pour plus d’options d’authentification et de détails sur la configuration OAuth, consultez Autoriser l’accès Service Principal à Databricks avec OAuth et fournisseur Databricks Terraform.
2. Créer un projet
Un projet est la ressource de niveau supérieur qui contient des Branch, des Endpoint, des bases de données et des rôles.
Lorsque vous créez un projet, Databricks provisionne automatiquement une Branch par default nommée production avec un endpoint de compute en lecture-ecriture nommé primary. Pour configurer l'une ou l'autre Ressource (par exemple, pour activer la haute disponibilité sur l'endpoint), déclarez un databricks_postgres_branch ou databricks_postgres_endpoint correspondant avec replace_existing = true. Terraform prend possession de la Ressource existante en faisant correspondre ces ID connus.
Créer un projet de base :
resource "databricks_postgres_project" "app" {
project_id = "my-app"
spec = {
pg_version = 17
display_name = "My Application"
enable_pg_native_login = false
}
}
Exécutez ces commandes pour mettre en forme votre configuration et créer le projet :
terraform fmt
terraform apply
enable_pg_native_login = false est le default pour les nouveaux projets. Pour autoriser les rôles Postgres natifs à se connecter avec des mots de passe statiques, définissez-le sur true. Consultez Gérer les connexions de mot de passe.
By default, la suppression d’un databricks_postgres_project de votre configuration et l’exécution de terraform apply supprime logiquement le projet. Il est conservé pendant 7 jours. Pour supprimer définitivement le projet immédiatement, ajoutez purge_on_delete = true au bloc de ressources avant de le supprimer. Consultez Étape 9 : Supprimer un projet pour plus de détails.
3. Obtenir un projet
Obtenez des informations sur le projet que vous venez de créer à partir d'une source de données :
data "databricks_postgres_project" "this" {
name = databricks_postgres_project.app.name
}
output "project_name" {
value = data.databricks_postgres_project.this.name
}
output "project_pg_version" {
value = try(data.databricks_postgres_project.this.status.pg_version, null)
}
output "project_display_name" {
value = try(data.databricks_postgres_project.this.status.display_name, null)
}
Les sources de données renvoient des valeurs dans le champ status. Utilisez try() pour accéder en toute sécurité aux champs qui pourraient ne pas être disponibles dans toutes les versions du fournisseur.
Exécutez ces commandes pour appliquer la configuration et afficher les détails du projet :
terraform apply
terraform output
4. Créer une Branch
Les branches offrent des environnements de base de données isolés au sein d'un projet.
Une branch production default est créée automatiquement lorsque vous créez un projet, et inclut un Endpoint implicite en lecture-écriture nommé primary. Lorsque vous créez des Branch supplémentaires comme la Branch de développement ci-dessous, chaque nouvelle Branch obtient également son propre Endpoint de lecture-écriture primary implicite. L’étape 5 montre comment soumettre cet Endpoint à la gestion Terraform.
Dans cet exemple, vous créez une Branch de développement :
resource "databricks_postgres_branch" "dev" {
branch_id = "dev"
parent = databricks_postgres_project.app.name
spec = {
no_expiry = true
}
}
output "dev_branch_name" {
value = databricks_postgres_branch.dev.name
}
Exécutez ces commandes pour créer la Branch et afficher son nom :
terraform apply
terraform output dev_branch_name
5e. Créer un Endpoint
Les Endpoints fournissent des ressources de compute pour l'exécution des requêtes sur une Branch.
Chaque branch que vous créez inclut un endpoint en lecture-écriture créé implicitement et nommé primary. Pour le placer sous la gestion Terraform et lui appliquer votre propre configuration, déclarez une ressource databricks_postgres_endpoint avec endpoint_id = "primary" et définissez replace_existing = true. Cela indique à Terraform de prendre en charge l'endpoint existant au lieu d'essayer d'en créer un nouveau. Sans replace_existing, l'application échoue avec une erreur d'opérations conflictuelles.
Prenez possession de l'Endpoint principal de la Branch de développement et appliquez-y votre configuration :
resource "databricks_postgres_endpoint" "dev_primary" {
endpoint_id = "primary"
parent = databricks_postgres_branch.dev.name
spec = {
endpoint_type = "ENDPOINT_TYPE_READ_WRITE"
}
replace_existing = true
}
output "dev_endpoint_name" {
value = databricks_postgres_endpoint.dev_primary.name
}
Exécutez ces commandes pour appliquer la configuration et afficher le nom de l’endpoint :
terraform apply
terraform output dev_endpoint_name
Pour les autres modèles d'endpoint, y compris les réplicas en lecture seule et l'autoscaling personnalisé, consultez la référence databricks_postgres_endpoint.
6. Lister les Endpoint
Listez les Endpoint de votre Branch de développement pour afficher les détails de l'Endpoint en lecture-écriture que vous avez créé :
data "databricks_postgres_endpoints" "dev" {
parent = databricks_postgres_branch.dev.name
}
output "dev_endpoint_names" {
value = [for e in data.databricks_postgres_endpoints.dev.endpoints : e.name]
}
output "dev_endpoint_types" {
value = [
for e in data.databricks_postgres_endpoints.dev.endpoints :
try(e.status.endpoint_type, null)
]
}
Exécutez ces commandes pour appliquer la configuration et afficher les détails du endpoint :
terraform apply
terraform output dev_endpoint_names
terraform output dev_endpoint_types
Lorsque vous exécutez terraform apply et que seules les sorties changent (sans modification de l'infrastructure), Terraform affiche « Modifications des sorties » et met à jour l'état sans modifier les Ressources.
7. Lister les Branch
Lister toutes les Branch de votre projet. Ceci renvoie deux Branch : la Branch de production qui a été créée automatiquement avec votre projet, et la Branch de développement que vous avez créée à l’étape précédente :
data "databricks_postgres_branches" "all" {
parent = databricks_postgres_project.app.name
}
output "branch_names" {
value = [for b in data.databricks_postgres_branches.all.branches : b.name]
}
Exécutez ces commandes pour appliquer la configuration et afficher les noms de Branch :
terraform apply
terraform output branch_names
8. Supprimer une Branch
Supprimez maintenant la Branch de développement que vous avez créée précédemment. Il s'agit d'un workflow typique : créer une Branch pour le développement ou les tests, et la supprimer lorsque vous avez terminé.
Vous supprimez les ressources en supprimant leurs déclarations de votre configuration et en exécutant terraform apply. Terraform prévoit de détruire les ressources qui ne sont plus déclarées.
Supprimer les éléments suivants de vos fichiers de configuration :
- La ressource
databricks_postgres_branch.devet ses sorties. - La ressource
databricks_postgres_endpoint.dev_primaryet ses sorties. - Toute source de données qui référence la branch supprimée. Par exemple, le bloc
data "databricks_postgres_endpoints" "dev"de l'étape 6 (et ses sortiesdev_endpoint_namesetdev_endpoint_types), car sonparent = databricks_postgres_branch.dev.nameéchoue une fois que la Branch a disparu.
Appliquez ensuite la modification :
terraform apply
Examinez le plan de destruction avant de confirmer.
Terraform détruit l'Endpoint avant la Branch par lui-même. L'Endpoint de parent = databricks_postgres_branch.dev.name crée une dépendance, ce qui permet à Terraform d'organiser les Opérations correctement sans configuration supplémentaire.
9. Supprimer un projet
Lorsque vous supprimez un databricks_postgres_project de votre configuration et exécutez terraform apply, Terraform supprime le projet par default. Le projet est conservé pendant 7 jours, période durant laquelle vous pouvez le récupérer, après quoi Lakebase le supprime définitivement.
Pour supprimer le projet et toutes les Ressources enfants, supprimez-les de votre configuration et exécutez :
terraform apply
Terraform utilise le graphe de dépendance pour détruire les ressources dans le bon ordre. Examinez le plan de destruction avant de confirmer.
Pour supprimer définitivement le projet immédiatement, définissez purge_on_delete = true sur la ressource avant de la supprimer de votre configuration :
resource "databricks_postgres_project" "app" {
project_id = "my-app"
purge_on_delete = true # Permanently delete on apply. Omit to soft-delete (7-day retention).
spec = {
pg_version = 17
display_name = "My Application"
}
}
Exécutez terraform apply pour passer le flag à l'état, puis supprimez la ressource de votre configuration et exécutez terraform apply à nouveau.
La création d'un nouveau projet avec le même project_id qu'un projet supprimé logiquement pendant la période de rétention de 7 jours échoue. Pour réutiliser le même ID de projet, récupérez d'abord le projet existant, forcez une suppression définitive avec purge_on_delete = true ou attendez l'expiration de la période de rétention.
Pour récupérer un projet supprimé de manière réversible avant l'expiration de la période de rétention de 7 jours, utilisez la CLI ou l'API.
Pour éviter la suppression accidentelle d'un projet de production, ajoutez un bloc lifecycle :
resource "databricks_postgres_project" "app" {
project_id = "my-app"
spec = { ... }
lifecycle {
prevent_destroy = true
}
}
Cela provoque l'échec de terraform apply avec une erreur au lieu de supprimer le projet. Supprimez prevent_destroy = true si vous souhaitez intentionnellement détruire la ressource.
Sérialiser les ressources paires avec depends_on
Lakebase ne traite qu'une seule opération de rôle, de base de données ou d'Endpoint à la fois au sein d'une seule Branch. Si vous déclarez deux ressources sœurs de ces types dans la même branch, et que Terraform n'a pas déjà un bord de dépendance entre elles (par exemple, une base de données référençant un rôle via spec.role), Terraform essaie de les créer en parallèle et l'une échoue avec une erreur d'opérations conflictuelles.
La correction consiste à ajouter un depends_on explicite afin que Terraform sérialise l'application :
resource "databricks_postgres_role" "schema_owner" {
role_id = "schemamigrator"
parent = databricks_postgres_branch.main.name
spec = {
postgres_role = "schemamigrator"
membership_roles = ["DATABRICKS_SUPERUSER"]
}
}
resource "databricks_postgres_role" "application" {
role_id = "application"
parent = databricks_postgres_branch.main.name
spec = {
postgres_role = "application"
}
depends_on = [databricks_postgres_role.schema_owner]
}
Ressources supplémentaires
-
Configuration typique d'un projet Lakebase avec Terraform — exemple complet prêt pour la production avec HA, Service Principal, table synchronisée et application Databricks
-
databricks_postgres_projectsur le registre Terraform. Point d'entrée pour les ressources Lakebase. La barre latérale du Registre Link d'ici àpostgres_branch,postgres_endpoint,postgres_roleetpostgres_database. -
Mettez à jour votre configuration Terraform pour utiliser les ressources d'Autoscaling.