Crea e gestisce sandbox con l'SDK

Importante

Questa funzionalità è in versione beta. Per abilitare questa anteprima di funzionalità nello spazio di lavoro, opta per l'impostazione Sandbox Databricks nella pagina Anteprime dello spazio di lavoro. Vedere Gestire le anteprime di Azure Databricks.

Databricks attualmente non addebita l'utilizzo di questa funzione. Tuttavia, costi e prezzi delle funzionalità in Beta sono soggetti a variazioni.

L'SDK Databricks per Python include un client sandbox per creare sandbox, eseguire comandi in essi e gestire il loro ciclo di vita. Questa pagina spiega queste operazioni. Per una panoramica di Databricks Sandbox, vedi Databricks Sandbox.

Installare l'SDK

Installa o aggiorna l'SDK Databricks per Python, che include il client sandbox:

pip install --upgrade databricks-sdk

Crea un WorkspaceClient

Tutte le operazioni sandbox vengono eseguite attraverso un WorkspaceClient. Crea un WorkspaceClient utilizzando le credenziali recuperate dall'ambiente, da un profilo di configurazione o da un host e un token espliciti:

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

Per ulteriori informazioni sulla configurazione e autenticazione dell'SDK, consulta Databricks SDK per Python.

Crea un sandbox

Crea una sandbox tramite ID. Puoi opzionalmente configurare la specifica di calcolo, come il timeout di inattività che controlla quanto a lungo il sandbox rimane attivo senza attività:

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"

Ottieni e elenca sandbox

Recupera un singolo sandbox per nome, oppure elenca tutti i sandbox:

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)

Esegui un comando in un ambiente sandbox

Esegui un comando in un sandbox e leggi il suo output. Il primo argomento è il nome sandbox, seguito dal programma da eseguire e dai suoi argomenti. Questo è un exec diretto senza shell, quindi, per eseguire un comando della shell, richiama /bin/bash -c. Fai passare qualsiasi variabile ambientale attraverso 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

Aggiorna i metadati sandbox

Puoi aggiornare il nome visualizzato e il timeout di inattività di una sandbox. Sono accettati solo i seguenti percorsi di campo. Qualsiasi altro percorso restituisce 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"]),
)

Fermati e riavvia un sandbox

Arresta un sandbox per liberare le relative risorse di calcolo mantenendo la tua directory home:

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

Riavvia la sandbox per riprendere il lavoro:

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

Eliminazione di un sandbox

Elimina un sandbox quando hai finito. L'eliminazione di un sandbox rimuove la sua directory home e interrompe la fatturazione del sandbox:

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

Risorse aggiuntive