メインコンテンツまでスキップ

SDKを使用したサンドボックスの作成と管理

備考

ベータ版

この機能はベータ版です。ワークスペースでこの機能プレビューを有効にするには、ワークスペースの「プレビュー」ページで Databricks Sandbox 設定を有効にします。Databricksのプレビューを管理するを参照してください。

Databricks では現在、この機能の使用に対する料金は発生しません。ただし、ベータ版の機能のコストと価格は変更される可能性があります。

Databricks SDK for Python には、サンドボックスの作成、サンドボックス内でのコマンドの実行、およびライフサイクルの管理を行うためのサンドボックスクライアントが含まれています。このページでは、それらの操作について説明します。Databricks Sandbox の概要については、Databricks Sandbox を参照してください。

SDKをインストールする

サンドボックスクライアントが含まれている Databricks SDK for Python をインストールまたはアップグレードします。

Bash
pip install --upgrade databricks-sdk

WorkspaceClientの作成

すべてのサンドボックス操作は、WorkspaceClientを通じて実行されます。環境、構成プロファイル、または明示的なホストとトークンから解決された資格情報を使用して、WorkspaceClientを作成します。

Python
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を指定してサンドボックスを作成します。サンドボックスがアクティビティなしで実行され続ける時間を制御する非アクティブタイムアウトなど、コンピュートの仕様をオプションで構成できます:

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

サンドボックスの取得と一覧表示

名前を指定して単一のサンドボックスを取得するか、すべてのサンドボックスを一覧表示します:

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

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

サンドボックスでコマンドを実行し、その出力を読み取ります。最初の引数はサンドボックス名で、その後に実行するプログラムとその引数が続きます。これはシェルなしの直接のexecであるため、シェルコマンドを実行するには /bin/bash -c を呼び出します。envs を介して環境変数を渡します:

Python
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={&quot;MY_VAR&quot;: &quot;value&quot;},
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
Python
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"]),
)

サンドボックスの停止と再起動

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

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

作業を再開するにはサンドボックスを再度起動します:

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

サンドボックスを削除する

完了したらサンドボックスを削除します。サンドボックスを削除すると、そのホームディレクトリが削除され、サンドボックスの課金が停止します:

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

その他のリソース