Important
這項功能位於 測試版 (Beta) 中。 要在工作區中啟用此功能預覽,請在工作區預覽頁面中選擇 Databricks 沙盒 設定。 請參閱 管理 Azure Databricks 預覽。
Databricks 目前不對使用此功能收費。 不過,Beta 版功能的費用與定價可能會有所變動。
Databricks SDK for Python 包含一個沙盒客戶端,用於建立沙盒、執行指令並管理其生命週期。 本頁將逐步介紹這些操作。 關於 Databricks 沙盒的概述,請參閱 Databricks 沙盒。
安裝 SDK
安裝或升級包含沙盒用戶端的 Python 版 Databricks SDK:
pip install --upgrade databricks-sdk
建立 WorkspaceClient
所有沙盒操作皆透過 WorkspaceClient。 使用從您的環境、設定檔或明確指定的主機和權杖解析出的認證資訊來建立 WorkspaceClient:
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...")
欲了解更多關於配置與驗證 SDK 的資訊,請參閱 Databricks SDK for Python。
建立一個沙盒
根據 ID 建立沙盒。 你可以選擇性地設定運算規範,例如控制沙盒在無活動狀態下持續運行多久的非活動逾時:
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"
取得並列出沙盒
依名稱檢索單一沙盒,或列出所有沙盒:
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)
在沙盒中執行指令
在沙盒中執行指令並讀取其輸出。 第一個參數是沙盒名稱,接著是要執行的程式及其參數。 這是一個沒有 shell 的直接執行,所以要執行 shell 指令,請呼叫 /bin/bash -c。 透過 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
更新沙盒元資料
你可以更新沙盒的顯示名稱和閒置逾時。 僅接受下列欄位路徑。 任何其他路徑都會傳回 INVALID_PARAMETER_VALUE:
display_namespec.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"]),
)
停止並重新啟動沙盒
停止沙盒以釋放其運算資源,同時保留你的主目錄:
w.sandbox.stop_sandbox("sandboxes/my-sandbox") # Moves to SANDBOX_STATE_STOPPED
再次啟動沙箱以繼續工作:
w.sandbox.start_sandbox("sandboxes/my-sandbox") # Moves to SANDBOX_STATE_RUNNING
刪除沙盒
完成後刪除沙盒。 刪除沙盒會移除其主目錄,並停止對沙盒的計費:
w.sandbox.delete_sandbox("sandboxes/my-sandbox")