Vytvářejte a spravujte sandboxy pomocí SDK

Important

Tato funkce je v beta verzi. Chcete-li v pracovním prostoru povolit náhled této funkce, povolte na stránce Náhledy v pracovním prostoru nastavení Databricks Sandbox. Viz Manage Azure Databricks preview.

Databricks v současnosti neúčtuje za používání této funkce. Cena a ceny funkcí v betě se však mohou změnit.

Databricks SDK pro Python obsahuje sandboxového klienta pro vytváření sandboxů, spouštění příkazů v nich a správu jejich životního cyklu. Tato stránka prochází těmito operacemi. Přehled o Databricks Sandbox naleznete v článku Databricks Sandbox.

Nainstalujte SDK

Nainstalujte nebo upgradujte Databricks SDK pro Python, který zahrnuje sandboxového klienta:

pip install --upgrade databricks-sdk

Vytvořit WorkspaceClient

Všechny operace v sandboxu probíhají přes WorkspaceClient. Vytvořte WorkspaceClient pomocí přihlašovacích údajů získaných z vašeho prostředí, konfiguračního profilu nebo explicitně zadaného hostitele a tokenu:

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

Pro více informací o konfiguraci a autentizaci SDK viz Databricks SDK pro Python.

Vytvořte sandbox

Vytvořte sandbox podle ID. Můžete si volitelně nastavit výpočetní specifikaci, například časovou hranici nečinnosti, která určuje, jak dlouho sandbox běží bez aktivity:

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"

Získání a výpis sandboxů

Získejte jeden sandbox podle jména, nebo vypsněte všechny sandboxy:

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)

Spusť příkaz v sandboxu

Spusť příkaz v sandboxu a přečti jeho výstup. Prvním argumentem je název sandboxu, následovaný programem pro spuštění a jeho argumenty. Jedná se o přímý exec bez shellu, takže pro spuštění shellového příkazu vyvoláme /bin/bash -c. Předejte libovolné proměnné prostředí přes 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

Aktualizujte metadata sandboxu

Můžete aktualizovat zobrazovací název sandboxu a časovou hranici nečinnosti. Přijímány jsou pouze následující terénní cesty. Jakákoli jiná cesta vrací 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"]),
)

Zastavte a znovu spusťte sandbox

Zastavte sandbox, abyste uvolnili jeho výpočetní kapacitu a zároveň zachovali svůj domovský adresář:

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

Znovu spusťte sandbox a pokračujte v práci:

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

Smažte sandbox

Až skončíte, smažte sandbox. Smazání sandboxu odstraní jeho domovský adresář a zastaví účtování za sandbox:

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

Dodatečné zdroje