Pular para o conteúdo principal

Create and gerenciar sandboxes with the SDK

info

Beta

Esse recurso está em Beta. Para habilitar esta visualização de recurso no workspace, ative a configuração Databricks Sandbox na página Pré-visualizações do workspace. Consulte Gerenciar prévias do Databricks.

O Databricks atualmente não cobra pelo uso deste recurso. No entanto, o custo e os preços dos recursos em Beta estão sujeitos a alterações.

O Databricks SDK for Python inclui um cliente de sandbox para criar sandboxes, executar comandos nelas e gerenciar seu ciclo de vida. Esta página descreve essas operações. Para obter uma visão geral do Databricks Sandbox, consulte Databricks Sandbox.

Instalar o SDK

Install or upgrade the Databricks SDK for Python, which includes the sandbox client:

Bash
pip install --upgrade databricks-sdk

Criar um WorkspaceClient

Todas as operações de sandbox são executadas por meio de um WorkspaceClient. Crie um WorkspaceClient usando credenciais resolvidas a partir do seu ambiente, de um perfil de configuração ou de um host e token explícitos:

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

Para obter mais informações sobre como configurar e autenticar o SDK, consulte Databricks SDK para Python.

Criar um sandbox

Criar um sandbox por ID. Opcionalmente, você pode configurar a especificação de compute, como o tempo limite de inatividade que controla por quanto tempo o sandbox permanece em execução sem atividade:

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"

Obter e listar sandboxes

Recupere um único sandbox por nome ou liste todos os 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)

Executar um comando em um sandbox

Execute um comando em uma sandbox e leia sua saída. O primeiro argumento é o nome da sandbox, seguido pelo programa a ser executado e seus argumentos. Esta é uma execução direta sem shell, portanto, para executar um comando de shell, invoque /bin/bash -c. Passe quaisquer variáveis de ambiente por 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

Atualizar metadados do sandbox

Você pode atualizar o nome de exibição e o tempo limite de inatividade de um sandbox. Apenas os seguintes caminhos de campo são aceitos. Qualquer outro caminho retorna 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"]),
)

Parar e reiniciar um sandbox

Pare um sandbox para liberar seu compute enquanto preserva seu diretório inicial:

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

Inicie o sandbox novamente para retomar o trabalho:

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

Excluir um sandbox

Delete a sandbox when you are done. Deleting a sandbox removes its home directory and stops billing for the sandbox:

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

Outros recursos