POST /v1/sandboxes:createFromFile は、アップロードされたファイルからサンドボックスを起動します。ファイルタイプとファイルのバイト列を送信すると、サンドボックスのゲートウェイがドキュメントをサンドボックスの spec に変換し、POST /v1/sandboxes と同じ作成処理を実行します。
受け付けるファイルタイプは Docker Compose (SANDBOX_FILE_TYPE_COMPOSE) のみです。ファイル内の各サービスは、単一のサンドボックス内のコンテナーになり、指定した 1 つのサービスがサンドボックスのプライマリになります。ゲートウェイはファイルのバイト列を保存しません。GET /v1/sandboxes/{sandboxId} は変換された spec を返します。
このガイドでは、プル可能なビルド済みイメージを使用する Compose ファイルについて説明します。既存の project をインポートする前に、Compose のサポートをお読みください。
始める前に
認証情報の選択と取得から認証情報を選択します。いずれか 1 つのタブのコマンドを Bash で実行し、続けて同じシェルでリクエストを実行してください。サーバーレス配置の場合は、サーバーレスサンドボックスへのアクセス権を持つアカウントの認証情報を使用します。CoreWeave Kubernetes Service (CKS) 配置を使用するには、Sandbox User ロールを持つ CoreWeave トークンと、同じ組織内に設定済みのランナーが必要です。- Forge APIキー
- CoreWeave API アクセストークン
[WANDB-API-KEY] をお使いの APIキーに置き換えます。[WANDB-ENTITY] をチーム名に置き換え、配列に -H "x-entity-id: [WANDB-ENTITY]" を追加します。https://api.cwsandbox.com のサンドボックスランタイム API を呼び出します。ランナー管理 API のエンドポイントは https://api.coreweave.com で、Sandbox Admin ロールを持つ CoreWeave トークンが必要です。
リクエストフィールド
リクエストでは、
mode、maxLifetimeSeconds、tags、network、objectStorageAccess、annotations、runnerIds、requestId も受け入れます。意味は POST /v1/sandboxes と同じです。networkIds は UNIMPLEMENTED を返します。
CKS に配置する場合は、CoreWeave トークンのタブを選択し、ランナーを有効にします。次に、作成例の jq オブジェクト内の mode を "SANDBOX_MODE_CKS" に変更します。特定のランナーを対象にするには、runnerIds: ["[RUNNER-ID]"] も追加し、プレースホルダーをそのランナーの ID に置き換えてください。オブジェクトストレージの前提条件については、サンドボックスに AI Object Storage へのアクセスを許可する を参照してください。
指定できるフィールドはこの一覧に限られます。このエンドポイントでは、ボリューム、インスタンスタイプ、ランタイムクラス、イメージをプルするための認証情報、公開サービスは利用できません。これらが必要な場合は、POST /v1/sandboxes を使用してください。
サンドボックスを作成する
Compose ファイルを作成します。Write compose.yaml
contents を base64 エンコードして POST します。
Create a sandbox from compose.yaml
STATE_CREATING 状態のサンドボックスです。STATE_RUNNING または終端状態になるまで、その sandboxId をポーリングします。
Poll the sandbox
main はプライマリとして指定され、HELPER_HOST は引き続き helper に設定されています。サンドボックス内では、helper は 127.0.0.1 に解決されます。
作成を安全に再試行するには、requestId を送信します。同じ requestId と同じ宣言済みの入力を使用すると、既存のサンドボックスが返されます。同じ requestId でもバイト列が異なる場合は、空白のみの変更も含め、理由 CWSANDBOX_REQUEST_ID_CONFLICT とともに ALREADY_EXISTS が返されます。
TypeScript からサンドボックスを作成する
TypeScript ソフトウェア開発キット (SDK) 1.0.0 では、runFromFile() と withSandboxFromFile() を通じて Compose をサポートしています。あらかじめ TypeScript クライアントのセットアップ を完了し、sandbox-client.mts ファイルをこのスクリプトと同じディレクトリに保存してください。
サンドボックスを作成する の compose.yaml ファイルを使用します。withSandboxFromFile() は、サンドボックスが準備完了になるまで待機してからコールバックを実行します。コールバックが値を返すか例外をスローすると、サンドボックスを停止します。
compose.mts
Compose sandbox ready を出力し、サンドボックスを停止します。
string 引数は常にファイルパスとして扱われます。インラインの YAML を渡すには、new TextEncoder().encode(yaml) で UTF-8 のバイト列に変換して渡してください。SDK はバイト列を再整形せずにそのまま送信します。ファイルサイズは API の上限である 256 KiB 以内に収めてください。
バージョン 1.0.0 では primaryService は必須で、ファイル内に定義されたサービス名を指定する必要があります。defaultResources は、project 全体ではなくサービスごとに CPU とメモリを割り当てます。GPU リソースには対応していません。本来ビルドが必要なサービスには、imageOverrides を使用してプル可能なイメージを指定してください。Compose のサポート に記載の制限は SDK にも適用されます。
ライフサイクルを手動で管理する場合は、runFromFile() が返すサンドボックスのハンドルを使用し、finally ブロック内で停止してください。両メソッドのシグネチャについては、SandboxClient を参照してください。サポートされるオプションについては、SandboxRunFromFileOptions を参照してください。
Compose のサポート
すべてのサービスは、1 つの Pod と 1 つのネットワーク namespace を共有します。サービス名は127.0.0.1 に解決されるため、HELPER_HOST: helper や API_BASE: http://main:8080 などの値は、ファイルを書き換えずに使用できます。サンドボックスには、サービスごとの IP アドレス、ブリッジネットワーク、レプリカはありません。
以下の動作は Docker Compose と異なります。
- 起動は逐次実行されます。 プライマリ以外の各サービスは、プライマリより先に、順番に起動します。これを考慮して
maxLifetimeSecondsを設定してください。サービスが準備完了にならない場合、サンドボックスはSTATE_CREATINGのままになります。 RUNNINGはプライマリのみをトラッキングします。 起動後にヘルパーがクラッシュしても、サンドボックスは失敗しません。healthcheckは exec のみの起動プローブになります。testは string、CMD、CMD-SHELL、またはNONEである必要があり、期間は整数秒で指定する必要があります。プローブの再試行回数を使い切ると、コンテナーは異常とマークされるのではなく、停止されます。- ポートは Pod 内にとどまります。
exposeとportsは待ち受けポートを宣言しますが、外部には公開されません。 - ビルド済みのイメージを使用してください。 すべてのサービスについて、ファイル内の
image:またはimageOverridesのエントリで、プル可能なイメージを指定してください。build:が必要なままのサービスは、UNIMPLEMENTEDを返します。 commandとentrypointは Docker のシェル形式と exec 形式に従います。 イメージのデフォルトを使用するには、これらを省略してください。明示的なnullと[]は拒否されます。- GPU はプライマリ専用です。
deploy.resources.reservations.devicesでgpu機能と正の整数の個数を指定します。 - 名前は DNS-1123 ラベルである必要があります (
My_Appではなくmy-app) 。また、予約済みの接頭辞cw-object-store-agent、cw-object-store-agent-restore、dns-egressは使用できません。
サポートされないキー
ドキュメントは自己完結している必要があります。ゲートウェイはディスクを読み取らず、環境変数も展開しません。認識されないキーは無視されず、問題のあるフィールドのパスとともに拒否されます。
ゲートウェイは
version、project の name、labels、x-* 拡張キーを無視します。labels がサンドボックスに渡されることを前提にしないでください。
よくあるエラー
フィールド違反は、パスと制限値を示すBadRequest の詳細として返されます。ドキュメントの内容は引用されません。
関連情報
- はじめに: spec から最初のサンドボックスを作成します。
- ランナー管理 API: CoreWeave API アクセストークンと Sandbox Admin ロールを使用してランナーを管理します。
- サンドボックスの環境変数: プラットフォームが各コンテナーに注入する環境変数について説明します。