Skapa och hantera sandlådor med SDK:n

Important

Den här funktionen finns i Beta. För att aktivera denna funktionsförhandsvisning i arbetsytan, välj in Databricks Sandbox-inställningen på sidan för arbetsytans förhandsvisningar. Se Hantera förhandsversioner av Azure Databricks.

Databricks tar för närvarande inte betalt för användning av denna funktion. Kostnad och pris för funktioner i Beta kan dock ändras.

Databricks SDK för Python inkluderar en sandlådeklient för att skapa sandlådor, köra kommandon i dem och hantera deras livscykel. Den här sidan går igenom dessa operationer. För en översikt av Databricks Sandbox, se Databricks Sandbox.

Installera SDK:n

Installera eller uppgradera Databricks SDK för Python, som inkluderar sandlådeklienten:

pip install --upgrade databricks-sdk

Skapa en WorkspaceClient

Alla operationer i sandlådan sker via en WorkspaceClient. Skapa en WorkspaceClient med inloggningsuppgifter som hämtats från din miljö, en konfigurationsprofil eller en uttryckligen angiven värd och token:

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

För mer information om att konfigurera och autentisera SDK:n, se Databricks SDK för Python.

Skapa en sandlåda

Skapa en sandlåda efter ID. Du kan valfritt konfigurera beräkningsspecifikationen, till exempel inaktivitetstidsgränsen som styr hur länge sandlådan är igång utan aktivitet:

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"

Hämta och lista sandlådor

Hämta en enda sandlåda efter namn, eller lista alla sandlådor:

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)

Kör ett kommando i en sandlåda

Kör ett kommando i en sandlåda och läs dess utdata. Det första argumentet är sandlådenamnet, följt av programmet som ska köras och dess argument. Detta är en direkt exec utan shell, så för att köra ett shell-kommando, anropa /bin/bash -c. Skicka alla miljövariabler genom 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

Uppdatera sandlådemetadata

Du kan uppdatera visningsnamnet för en sandlåda och tidsgränsen för inaktivitet. Endast följande fältvägar accepteras. Alla andra sökvägar returnerar 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"]),
)

Stoppa och starta om en sandlåda

Stoppa en sandlåda för att frigöra dess beräkningsresurser samtidigt som du bevarar din hemkatalog:

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

Starta sandlådan igen för att återuppta arbetet:

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

Ta bort en sandlåda

Radera en sandlåda när du är klar. Om du tar bort en sandlåda tas dess hemkatalog bort och faktureringen för sandlådan stoppas:

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

Ytterligare resurser