Aller au contenu principal

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

info

Bêta

Cette fonctionnalité est en bêta. Pour activer cet aperçu de fonctionnalité dans le workspace, activez le paramètre Databricks Sandbox sur la page des aperçus du workspace. Consultez Gérer les aperçus Databricks.

Databricks ne facture actuellement pas l'utilisation de cette fonctionnalité. Toutefois, les coûts et les tarifs des fonctionnalités en version bêta sont susceptibles d'être modifiés.

Le Databricks SDK pour Python inclut un client sandbox permettant de créer des bacs à sable, d’exécuter des commandes dedans et de gérer leur cycle de vie. Cette page passe en revue ces opérations. Pour obtenir une vue d’ensemble de Databricks Sandbox, consultez Databricks Sandbox.

Installez le SDK

Installez ou mettez à niveau le Databricks SDK pour Python, qui inclut le client sandbox :

Bash
pip install --upgrade databricks-sdk

Créer un WorkspaceClient

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

Python
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...")

For more information about configuring and authenticating the SDK, see Databricks SDK for Python.

Créer un sandbox

Créer un sandbox par ID. Vous pouvez éventuellement configurer les caractéristiques du compute, telles que le délai d’inactivité qui détermine la durée pendant laquelle le sandbox reste actif sans activité :

Python
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 lister les bacs à sables

Récupérez un unique sandbox par son nom, ou listez tous les sandboxes :

Python
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écuter une commande dans un sandbox

Exécuter une commande dans un sandbox et lire son résultat. Le premier argument est le nom du sandbox, suivi du programme à exécuter et de ses arguments. Il s'agit d'une exécution directe sans Shell ; par conséquent, pour exécuter une commande Shell, invoquez /bin/bash -c. Transmettez les variables d’environnement par l’intermédiaire de envs:

Python
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={&quot;MY_VAR&quot;: &quot;value&quot;},
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 sandbox

Vous pouvez mettre à jour le nom d'affichage et le délai d'inactivité d'un sandbox. Seuls les chemins d'accès aux champs suivants sont acceptés : Tout autre chemin renvoie INVALID_PARAMETER_VALUE:

  • display_name
  • spec.compute.inactivity_timeout
Python
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êter et redémarrer un sandbox

Arrêtez un sandbox pour libérer son compute tout en préservant votre répertoire d'accueil :

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

Redémarrez le sandbox pour reprendre le travail :

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

Supprimer un sandbox

Supprimez un sandbox lorsque vous avez terminé. La suppression d’un sandbox supprime son répertoire d’accueil et arrête la facturation du sandbox :

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

Ressources supplémentaires