Guide de l’API de mise à l’échelle automatique Lakebase

Important

La version Lakebase Autoscaling est la dernière de Lakebase, avec l'évolutivité automatique, la mise à l’échelle jusqu'à zéro, la création de branches et la restauration instantanée. Pour connaître les régions prises en charge, consultez disponibilité de la région. Si vous êtes un utilisateur Lakebase Provisionné, consultez Lakebase Provisioned.

Cette page fournit une vue d’ensemble de l’API de mise à l’échelle automatique Lakebase, notamment l’authentification, les points de terminaison disponibles et les modèles courants pour l’utilisation de l’API REST, de l’interface CLI Databricks et des sdk Databricks (Python, Java, Go).

Pour obtenir la référence complète de l’API, consultez la documentation de l’API Postgres.

Important

L’API Postgres Lakebase est en version bêta. Les points de terminaison d’API, les paramètres et les comportements sont susceptibles de changer.

Authentication

L’API de mise à l’échelle automatique Lakebase utilise l’authentification OAuth au niveau de l’espace de travail pour la gestion de l’infrastructure de projet (création de projets, configuration des paramètres, etc.).

Note

Deux types de connectivité : cette API est destinée à la gestion de la plateforme (création de projets, branches, calculs). Pour l’accès à la base de données (connexion aux données de requête) :

  • Clients SQL (psql, pgAdmin, DBeaver) : utilisez des jetons OAuth Lakebase ou des mots de passe Postgres. Consultez Authentification.
  • API de données (HTTP RESTful) : utilisez des jetons OAuth Lakebase. Consultez l’API de données.
  • Pilotes de langage de programmation (psycopg, SQLAlchemy, JDBC) : utilisez des jetons OAuth Lakebase ou des mots de passe Postgres. Consultez le guide de démarrage rapide.

Pour obtenir une explication complète de ces deux couches d’authentification, consultez architecture d’authentification.

Configurer l’authentification

Authentifiez-vous à l’aide de l’interface CLI Databricks :

databricks auth login --host https://your-workspace.cloud.databricks.com

Suivez les invites de navigateur pour vous connecter. L’interface CLI met en cache votre jeton OAuth à l’adresse ~/.databricks/token-cache.json.

Choisissez ensuite votre méthode d’accès :

SDK Python

Le Kit de développement logiciel (SDK) utilise l’authentification unifiée et gère automatiquement les jetons OAuth :

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

SDK Java

Le Kit de développement logiciel (SDK) utilise l’authentification unifiée et gère automatiquement les jetons OAuth :

import com.databricks.sdk.WorkspaceClient;

WorkspaceClient w = new WorkspaceClient();

Interface de ligne de commande (CLI)

Les commandes utilisent automatiquement le jeton mis en cache :

databricks postgres list-projects

friser

Générez un jeton pour les appels d’API directs :

export DATABRICKS_TOKEN=$(databricks auth token | jq -r .access_token)

curl -X GET "https://your-workspace.cloud.databricks.com/api/2.0/postgres/projects" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}"

Les jetons OAuth expirent après une heure. Régénérer en fonction des besoins.

Pour plus d’informations, consultez Autoriser l’accès utilisateur à Databricks avec OAuth.

Points de terminaison disponibles (bêta)

Tous les points de terminaison utilisent le chemin /api/2.0/postgres/de base .

Projets

Opération Méthode Point de terminaison Documentation
Créer un projet POST /projects Créer un projet
Mettre à jour le projet PATCH /projects/{project_id} paramètres généraux
Supprimer le projet DELETE /projects/{project_id} Supprimer un projet
Obtenir un projet GET /projects/{project_id} Obtenir les détails du projet
Répertorier les projets GET /projects Répertorier les projets

Branches

Opération Méthode Point de terminaison Documentation
Créer une branche POST /projects/{project_id}/branches Créer une branche
Mettre à jour la branche PATCH /projects/{project_id}/branches/{branch_id} Mettre à jour les paramètres de branche
Supprimer une branche DELETE /projects/{project_id}/branches/{branch_id} Supprimer une branche
Récupérer une branche GET /projects/{project_id}/branches/{branch_id} Afficher les branches
Répertorier les branches GET /projects/{project_id}/branches Répertorier les branches

Points de terminaison (calculs et réplicas en lecture)

Dans l’API, un calcul est appelé point de terminaison. Pour obtenir une vue d’ensemble conceptuelle, consultez Calculs et points de terminaison.

Le tableau suivant mappe les concepts de l’interface utilisateur à leurs équivalents d’API :

Concept d’interface utilisateur Ressource ou champ d’API Documentation
Calcul principal Point de terminaison avec endpoint_type: ENDPOINT_TYPE_READ_WRITE Gérer les calculs
Réplica en lecture Point de terminaison avec endpoint_type: ENDPOINT_TYPE_READ_ONLY Gérer les réplicas en lecture
Haute disponibilité group champ (EndpointGroupSpec) dans la spécification du point de terminaison Gérer la haute disponibilité
Identificateurs de calcul (UID, Nom de la ressource) uid et name (chemin de ressource complet) sur l’objet Endpoint Identificateurs de calcul

Opérations disponibles

Opération Méthode Point de terminaison Documentation
Création d’un point de terminaison POST /projects/{project_id}/branches/{branch_id}/endpoints Créer un réplica en lecture
Mettre à jour le point de terminaison PATCH /projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} Modifier une instance de calcul / Modifier un réplica de lecture / Gérer la haute disponibilité
Supprimer le point de terminaison DELETE /projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} Supprimer un réplicat en lecture
Obtenir un point de terminaison GET /projects/{project_id}/branches/{branch_id}/endpoints/{endpoint_id} Afficher les calculs
Lister les points de terminaison GET /projects/{project_id}/branches/{branch_id}/endpoints Afficher les calculs

Rôles

Opération Méthode Point de terminaison Documentation
Répertorier les rôles GET /projects/{project_id}/branches/{branch_id}/roles Afficher les rôles Postgres
Créer un rôle POST /projects/{project_id}/branches/{branch_id}/roles Créer un rôle | OAuthCréer un rôle de mot de passe
Obtenir un rôle GET /projects/{project_id}/branches/{branch_id}/roles/{role_id} Afficher les rôles Postgres
Mettre à jour un rôle PATCH /projects/{project_id}/branches/{branch_id}/roles/{role_id} Mettre à jour un rôle
Supprimer un rôle DELETE /projects/{project_id}/branches/{branch_id}/roles/{role_id} Supprimer un rôle

Catalogues

Opération Méthode Point de terminaison Documentation
Inscrire une base de données auprès du catalogue Unity POST /catalogs Inscrire une base de données
Obtenir l'enregistrement du catalogue GET /catalogs/{catalog_id} Vérifier l’état de l’inscription
Supprimer l’inscription du catalogue DELETE /catalogs/{catalog_id} Désinscrire une base de données

Note

L’inscription et la suppression sont des opérations de longue durée. Interrogez l’opération retournée jusqu’à done: true. Consultez les opérations de longue durée.

La suppression d’une inscription de catalogue ne supprime pas la base de données Postgres sous-jacente.

Tables synchronisées

Opération Méthode Point de terminaison Documentation
Créer une table synchronisée POST /synced_tables Créer une table synchronisée
Obtenir une table synchronisée GET /synced_tables/{table_name} Vérifier l’état de synchronisation
Supprimer la table synchronisée DELETE /synced_tables/{table_name} Supprimer une table synchronisée

Note

Dans le chemin table_name, le format utilisé est catalog.schema.table.

Les opérations de création et de suppression sont des opérations de longue durée. Interrogez l’opération retournée jusqu’à done: true. Consultez les opérations de longue durée.

La suppression d’une table synchronisée supprime uniquement l’inscription du catalogue Unity. Supprimez la table Postgres séparément pour libérer de l’espace.

Informations d’identification de base de données

Opération Méthode Point de terminaison Documentation
Générer des identifiants de base de données POST /credentials Authentification par jeton OAuth

Opérations

Opération Méthode Point de terminaison Documentation
Opération de récupération GET /projects/{project_id}/operations/{operation_id} Voir l’exemple ci-dessous

Autorisations

Les autorisations ACL du projet utilisent l’API standard Azure Databricks Permissions, et non pas le chemin d’accès de base . Définissez request_object_type sur database-projects et request_object_id sur l’ID de votre projet (par exemple, my-app).

Opération Méthode Point de terminaison Documentation
Obtenir des autorisations de projet GET /api/2.0/permissions/database-projects/{project_id} Informations de référence sur l’API Autorisations
Mettre à jour les autorisations du projet PATCH /api/2.0/permissions/database-projects/{project_id} Informations de référence sur l’API Autorisations
Remplacer les autorisations de projet PUT /api/2.0/permissions/database-projects/{project_id} Informations de référence sur l’API Autorisations

Les niveaux d’autorisation pouvant être accordés pour les projets Lakebase sont CAN_USE et CAN_MANAGE. CAN_CREATE est un niveau hérité et ne peut pas être défini via l’API. Consultez les niveaux d’autorisation.

Pour obtenir des exemples d’utilisation et des équivalents CLI/SDK/Terraform, consultez Accorder des autorisations par programmation.

Opération Obtenir

Vérifiez l’état d’une opération de longue durée par son nom de ressource.

SDK Python

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Project, ProjectSpec

w = WorkspaceClient()

# Start an operation (example: create project)
operation = w.postgres.create_project(
    project=Project(spec=ProjectSpec(pg_version=17)),
    project_id="my-project",
)
print(f"Operation started: {operation.name()}")

# Wait for completion
result = operation.wait()
print(f"Operation completed: {result.name}")

SDK Java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;

WorkspaceClient w = new WorkspaceClient();

// Start an operation (example: create project)
CreateProjectOperation operation = w.postgres().createProject(
    new CreateProjectRequest()
        .setProjectId("my-project")
        .setProject(new Project()
            .setSpec(new ProjectSpec()
                .setPgVersion(17L)))
);
System.out.println("Operation started: " + operation.getName());

// Wait for completion
Project result = operation.waitForCompletion();
System.out.println("Operation completed: " + result.getName());

Interface de ligne de commande (CLI)

L’interface CLI attend automatiquement que les opérations se terminent par défaut. Utilisez --no-wait pour ignorer l’interrogation :

# Create project without waiting
databricks postgres create-project my-project --no-wait \
  --json '{"spec": {"pg_version": 17}}'

# Later, check the operation status using the operation name from the response
databricks postgres get-operation projects/my-project/operations/<operation-id>

friser

# Get operation status
curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Format de réponse :

{
  "name": "projects/my-project/operations/<operation-id>",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/databricks.postgres.v1.Project",
    "name": "projects/my-project",
    ...
  }
}

Champs:

  • done: false en cours, true une fois terminé
  • response: contient le résultat quand done est true
  • error: contient les détails de l’erreur en cas d’échec de l’opération

Modèles courants

Nommage des ressources

Les ressources suivent un modèle de nommage hiérarchique dans lequel les ressources enfants sont définies par rapport à leur parent.

Les projets utilisent ce format :

projects/{project_id}

Les ressources enfants telles que les opérations sont imbriquées sous leur projet parent :

projects/{project_id}/operations/{operation_id}

Cela signifie que vous avez besoin de l’ID de projet parent pour accéder aux opérations ou à d’autres ressources enfants.

ID de ressource :

Lors de la création de ressources, vous devez fournir un ID de ressource (par exemple my-app) pour le paramètre project_id, branch_id ou endpoint_id. Cet ID fait partie du chemin d’accès aux ressources dans les appels d’API (par projects/my-app/branches/developmentexemple).

Vous pouvez éventuellement fournir une display_name étiquette plus descriptive à votre ressource. Si vous ne spécifiez pas de nom d’affichage, le système utilise votre ID de ressource comme nom d’affichage.

:::tip Recherche de ressources dans l’interface utilisateur

Pour localiser un projet dans l’interface utilisateur Lakebase, recherchez son nom complet dans la liste des projets. Si vous n’avez pas fourni de nom d'affichage personnalisé lors de la création du projet, recherchez votre project_id (par exemple, « my-app »).

:::

Note

Les ID de ressource ne peuvent pas être modifiés après la création.

Exigences:

  • Doit comporter 1 à 63 caractères
  • Lettres minuscules, chiffres et traits d’union uniquement
  • Impossible de démarrer ou de se terminer par un trait d’union
  • Exemples : my-app, , analytics-dbcustomer-123

Opérations de longue durée (LRO)

Les opérations de création, de mise à jour et de suppression retournent un databricks.longrunning.Operation objet qui fournit un état d’achèvement.

Exemple de réponse d’opération :

{
  "name": "projects/my-project/operations/<operation-id>",
  "done": false
}

Interroger pour vérifier l'achèvement à l’aide de GetOperation :

SDK Python

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Project, ProjectSpec

w = WorkspaceClient()

# Start an operation
operation = w.postgres.create_project(
    project=Project(spec=ProjectSpec(pg_version=17)),
    project_id="my-project",
)

# Wait for completion
result = operation.wait()
print(f"Operation completed: {result.name}")

SDK Java

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.postgres.*;

WorkspaceClient w = new WorkspaceClient();

// Start an operation
CreateProjectOperation operation = w.postgres().createProject(
    new CreateProjectRequest()
        .setProjectId("my-project")
        .setProject(new Project()
            .setSpec(new ProjectSpec()
                .setPgVersion(17L)))
);

// Wait for completion
Project result = operation.waitForCompletion();
System.out.println("Operation completed: " + result.getName());

Interface de ligne de commande (CLI)

L’interface CLI attend automatiquement que les opérations se terminent par défaut. Permet --no-wait de retourner immédiatement :

databricks postgres create-project my-project --no-wait \
  --json '{"spec": {"pg_version": 17}}'

friser

# Poll the operation
curl "$WORKSPACE/api/2.0/postgres/projects/my-project/operations/<operation-id>" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq '.done'

Vérifiez toutes les quelques secondes jusqu'à ce que done soit true.

Mettre à jour des masques

Les opérations de mise à jour nécessitent un update_mask paramètre spécifiant les champs à modifier. Cela empêche le remplacement accidentel de champs non liés.

Différences de format :

Méthode Format Example
REST API Paramètre de requête. ?update_mask=spec.display_name
SDK Python Objet FieldMask update_mask=FieldMask(field_mask=["spec.display_name"])
Interface de ligne de commande (CLI) Argument positionnel update-project NAME spec.display_name

Gestion des erreurs

L’API Lakebase retourne des codes d’état HTTP standard.

409 : Opérations en conflit

Lakebase peut retourner une 409 Conflict erreur pour plusieurs raisons :

  • Une opération de maintenance interne est en cours sur le projet.
  • Le projet a atteint sa limite d’opérations simultanées.
  • Vos propres demandes d’API se chevauchent. Par exemple, créer une branche avant que la création d'une branche précédente ne soit terminée.

Signification :

Lakebase planifie parfois des opérations de maintenance sur des projets. Si une demande cliente arrive alors qu’une de ces opérations est en cours, Lakebase rejette la nouvelle demande avec une 409 Conflict erreur. Vous pouvez également obtenir cette réponse lorsque le projet est en capacité ou que vos appels d’API se chevauchent.

Ce comportement est normal. Les clients doivent être prêts à réessayer les demandes lorsque cette erreur se produit.

Que faire :

Relancez la requête. Une fois l’opération interne terminée ou la capacité libérée, Lakebase accepte de nouvelles demandes pour le projet.

Utilisez une interruption exponentielle pour les nouvelles tentatives : attendez un court intervalle avant la première nouvelle tentative, puis doublez l’attente sur chaque tentative suivante. Un intervalle de départ de 100 millisecondes avec un maximum de 30 secondes est une valeur par défaut raisonnable.

SDK Python
import time
from databricks.sdk import WorkspaceClient
from databricks.sdk.errors import ResourceConflict
from databricks.sdk.service.postgres import Branch, BranchSpec

w = WorkspaceClient()

def retry_on_conflict(fn, max_attempts=5, base_delay=0.1):
    """Retry a Lakebase API call when a conflicting operation is in progress."""
    for attempt in range(max_attempts):
        try:
            return fn()
        except ResourceConflict:
            if attempt == max_attempts - 1:
                raise
            wait = base_delay * (2 ** attempt)
            print(f"Conflicting operation in progress. Retrying in {wait}s...")
            time.sleep(wait)

# Example: create a branch with retry
branch = retry_on_conflict(
    lambda: w.postgres.create_branch(
        parent="projects/my-project",
        branch=Branch(spec=BranchSpec(no_expiry=True)),
        branch_id="my-branch",
    ).wait()
)
friser
# Retry with exponential backoff on 409 responses
retry_on_conflict() {
  local cmd=("$@")
  local max_attempts=5
  local delay=0.1
  local attempt=0

  while [ $attempt -lt $max_attempts ]; do
    response=$(curl -s -w "\n%{http_code}" "${cmd[@]}")
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')

    if [ "$http_code" -ne 409 ]; then
      echo "$body"
      return 0
    fi

    attempt=$((attempt + 1))
    if [ $attempt -eq $max_attempts ]; then
      echo "Max retries reached. Last response: $body" >&2
      return 1
    fi

    echo "Conflicting operation in progress. Retrying in ${delay}s..." >&2
    sleep "$delay"
    delay=$((delay * 2))
  done
}

# Example: create a branch with retry
retry_on_conflict \
  -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches?branch_id=my-branch" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"spec": {"no_expiry": true}}'

Note

Une 409 Conflict requête d’API Lakebase signifie que la demande n’a pas été acceptée, et non qu’elle a été appliquée. Vérifiez toujours l’état de la ressource après une nouvelle tentative réussie en appelant le point de terminaison correspondant GET .

SDK et infrastructure en tant que code