Maak en beheer sandboxes met de SDK

Important

Deze functie bevindt zich in de bètaversie. Om de preview van deze functie in de werkruimte in te schakelen, meld je je aan voor de Databricks Sandbox-instelling op de pagina Previews van de werkruimte. Zie Azure Databricks previews beheren.

Databricks rekent momenteel geen kosten voor het gebruik van deze functie. Echter, kosten en prijzen voor functies in de bèta kunnen veranderen.

De Databricks SDK voor Python bevat een sandbox-client voor het maken van sandboxes, het uitvoeren van commando's daarin en het beheren van hun levenscyclus. Deze pagina belicht deze operaties. Voor een overzicht van Databricks Sandbox, zie Databricks Sandbox.

Installeer de SDK

Installeer of upgrade de Databricks SDK voor Python, die de sandbox-client bevat:

pip install --upgrade databricks-sdk

Maak een WorkspaceClient aan

Alle sandbox-operaties lopen via een WorkspaceClient. Maak een WorkspaceClient met inloggegevens die afkomstig zijn uit je omgeving, een configuratieprofiel of een expliciet opgegeven host en 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...")

Voor meer informatie over het configureren en authenticeren van de SDK, zie Databricks SDK voor Python.

Maak een sandbox

Maak een sandbox aan op ID. Je kunt optioneel de compute-specificatie configureren, zoals de inactiviteitstimeout die bepaalt hoe lang de sandbox zonder activiteit blijft draaien:

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"

Sandboxen ophalen en weergeven

Haal een enkele sandbox op naam op, of noem alle 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)

Voer een commando uit in een sandbox

Voer een commando uit in een sandbox en lees de output ervan. Het eerste argument is de naam van de sandbox, gevolgd door het programma dat moet draaien en de argumenten daarvan. Dit is een directe exec zonder shell, dus om een shell-commando uit te voeren, roep /bin/bash -c. Laat alle omgevingsvariabelen doorlopen: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

Sandbox-metadata bijwerken

Je kunt de weergavenaam en de timeout voor inactiviteit van een sandbox bijwerken. Alleen de volgende veldpaden worden geaccepteerd. Elk ander pad resulteert in 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"]),
)

Stop en start opnieuw een sandbox

Stop een sandbox om de rekenkracht vrij te geven met behoud van je thuismap:

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

Start de sandbox opnieuw om het werk te hervatten:

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

Verwijder een sandbox

Verwijder een sandbox als je klaar bent. Het verwijderen van een sandbox verwijdert de thuismap en stopt de facturering voor de sandbox:

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

Aanvullende bronnen