Créer et gérer des bacs à sable avec le SDK

Important

Cette fonctionnalité est en version bêta. Pour activer cette aperçu de fonctionnalité dans l’espace de travail, optez pour le paramètre Sandbox Databricks dans la page Aperçu de l’espace de travail. Consultez Gérer les préversions d’Azure Databricks.

Databricks ne facture actuellement pas l’utilisation de cette fonctionnalité. Cependant, le coût et les prix des fonctionnalités en version Bêta peuvent évoluer.

Le SDK Databricks pour Python inclut un client bac à sable pour créer des bacs à sable, exécuter des commandes dans ceux-ci et gérer leur cycle de vie. Cette page présente ces opérations. Pour un aperçu du bac à sable Databricks, voir le bac à sable Databricks.

Installer le Kit de développement logiciel (SDK)

Installez ou mettez à jour le SDK Databricks pour Python, qui inclut le client bac à sable :

pip install --upgrade databricks-sdk

Créer un client WorkspaceClient

Toutes les opérations du sandbox s’exécutent via un WorkspaceClient. Créez un WorkspaceClient à l’aide d’identifiants obtenus à partir de votre environnement, d’un profil de configuration ou d’un hôte et d’un jeton explicitement fournis :

from databricks.sdk import WorkspaceClient

# Resolve credentials from the environment or the default config profile:
w = WorkspaceClient()

# Or select a specific ~/.databrickscfg profile:
w = WorkspaceClient(profile="my-workspace")

# Or pass the host and token explicitly:
w = WorkspaceClient(host="https://<workspace>.cloud.databricks.com", token="dapi...")

Pour plus d’informations sur la configuration et l’authentification du SDK, voir Databricks SDK pour Python.

Créez un bac à sable

Créez un sandbox à partir de son ID. Vous pouvez optionnellement configurer la spécification de calcul, comme le délai d’inactivité qui contrôle combien de temps le bac à sable reste en fonctionnement sans activité :

from google.protobuf.duration_pb2 import Duration
from databricks.sdk.service.sandbox import ComputeSpec, Sandbox, SandboxSpec

created = w.sandbox.create_sandbox(
    sandbox=Sandbox(
        spec=SandboxSpec(compute=ComputeSpec(inactivity_timeout=Duration(seconds=900))),
    ),
    sandbox_id="my-sandbox",
)
print(created.name)   # "sandboxes/my-sandbox"

Obtenir et répertorier les environnements de test

Récupérez un bac à sable unique par nom, ou listez tous les bacs à sable :

sandbox = w.sandbox.get_sandbox("sandboxes/my-sandbox")
print(sandbox.status.state)   # SandboxState.SANDBOX_STATE_RUNNING

for sandbox in w.sandbox.list_sandboxes():
    print(sandbox.name, sandbox.status.state if sandbox.status else None)

Exécutez une commande dans un bac à sable

Exécutez une commande dans un bac à sable et lisez sa sortie. Le premier argument est le nom du bac à sable, suivi du programme à exécuter et de ses arguments. C’est un exécutif direct sans shell, donc pour exécuter une commande shell, invoke /bin/bash -c. Faites passer toutes les variables d’environnement à travers envs:

from google.protobuf.duration_pb2 import Duration

resp = w.sandbox.execute_command_sync(
    "sandboxes/my-sandbox",
    "/bin/bash",
    args=["-c", "echo hello world && whoami"],
    envs={"MY_VAR": "value"},
    execution_timeout=Duration(seconds=30),
)
print(resp.status)      # ExecuteCommandStatus.EXECUTE_COMMAND_STATUS_COMPLETED
print(resp.exit_code)   # 0
print(resp.stdout)      # "hello world\nsandbox-agent\n"
print(resp.stderr)
print(resp.truncated)   # True if the output was truncated

Mettre à jour les métadonnées du bac à sable

Vous pouvez mettre à jour le nom affiché et le délai d’inactivité d’un bac à sable. Seuls les chemins de terrain suivants sont acceptés. Tout autre chemin renvoie INVALID_PARAMETER_VALUE:

  • display_name
  • spec.compute.inactivity_timeout
from databricks.sdk.common.types.fieldmask import FieldMask
from databricks.sdk.service.sandbox import ComputeSpec, Sandbox, SandboxSpec
from google.protobuf.duration_pb2 import Duration

# Rename the sandbox
w.sandbox.update_sandbox(
    name="sandboxes/my-sandbox",
    sandbox=Sandbox(display_name="renamed sandbox"),
    update_mask=FieldMask(["display_name"]),
)

# Extend the inactivity timeout
w.sandbox.update_sandbox(
    name="sandboxes/my-sandbox",
    sandbox=Sandbox(spec=SandboxSpec(compute=ComputeSpec(inactivity_timeout=Duration(seconds=1800)))),
    update_mask=FieldMask(["spec.compute.inactivity_timeout"]),
)

Arrêtez et redémarrez un bac à sable

Arrêtez un bac à sable pour libérer son calcul tout en préservant votre répertoire personnel :

w.sandbox.stop_sandbox("sandboxes/my-sandbox")    # Moves to SANDBOX_STATE_STOPPED

Relancez le bac à sable pour reprendre le travail :

w.sandbox.start_sandbox("sandboxes/my-sandbox")   # Moves to SANDBOX_STATE_RUNNING

Supprimer un bac à sable

Supprime un bac à sable quand tu as fini. Supprimer un bac à sable supprime son répertoire personnel et arrête la facturation pour le bac à sable :

w.sandbox.delete_sandbox("sandboxes/my-sandbox")

Ressources additionnelles