Créer et gérer des bacs à sables avec le SDK
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 :
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 :
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é :
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 :
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:
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 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_namespec.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êter et redémarrer un sandbox
Arrêtez un sandbox pour libérer son compute tout en préservant votre répertoire d'accueil :
w.sandbox.stop_sandbox("sandboxes/my-sandbox") # Moves to SANDBOX_STATE_STOPPED
Redémarrez le sandbox pour reprendre le travail :
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 :
w.sandbox.delete_sandbox("sandboxes/my-sandbox")