SDKでサンドボックスを作成・管理

Important

この機能は ベータ版です。 ワークスペースでこの機能プレビューを有効にするには、ワークスペースプレビューページの Databricksサンドボックス 設定に切り替えてください。 Manage Azure Databricks プレビューを参照してください。

Databricksは現在、この機能の使用に対して料金を請求していません。 ただし、ベータ版の機能のコストや価格は変更される場合があります。

Python用のDatabricks SDKには、サンドボックスの作成、コマンドの実行、ライフサイクル管理のためのサンドボックスクライアントが含まれています。 このページでは、その作業について説明しています。 Databricks Sandboxの概要については、 Databricks Sandboxをご覧ください。

SDK をインストールする

Python用のDatabricks SDKをインストールしたりアップグレードしたりしてください。サンドボックスクライアントも含まれます:

pip install --upgrade databricks-sdk

ワークスペースクライアントを作成する

すべてのサンドボックス操作は 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)

サンドボックスでコマンドを実行する

サンドボックスでコマンドを実行し、その出力を読みます。 最初の引数はサンドボックス名で、その後に実行するプログラムとその引数が続きます。 これはシェルを持たないダイレクトエグゼクなので、シェルコマンドを実行するには /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_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"]),
)

サンドボックスを止めて再起動する

サンドボックスを停止してコンピュートを解放しつつ、ホームディレクトリを保持する:

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

その他のリソース