> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 長時間実行サンドボックスを実行する

> サーバーレス または CKS の配置で、サンドボックスのライフタイムを最大 30 日に設定します。

CoreWeave のサンドボックスは、サーバーレス と CoreWeave Kubernetes Service (CKS) のどちらの配置でも、最大 30 日 (2,592,000 秒) 実行できます。エージェント、開発環境、バッチワークロードが処理を完了するのに十分な時間を確保できるよう、サンドボックスの作成時にライフタイムを設定してください。

このガイドでは、開発者向けに、より長いライフタイムをリクエストする方法を説明します。また、管理者向けに、CKS ランナー上のサンドボックスのデフォルトのライフタイムを設定する方法を説明します。

<h2 id="before-you-begin">
  始める前に
</h2>

[サンドボックスのセットアップ](/ja/products/sandboxes/get-started#coreweave-api-access-token)を完了し、Python クライアントをインストールしたうえで、CoreWeave API アクセストークンを設定します：

```bash theme={"system"}
pip install --upgrade cwsandbox
export CWSANDBOX_API_KEY="[API-ACCESS-TOKEN]"
```

CKS 配置を使用する場合は、[独自のコンピュートを使用する](/ja/products/sandboxes/get-started-cks)の手順も完了してください。CKS の例にある `[RUNNER-ID]` は、設定済みのランナーの ID に置き換えてください。Forge のAPIキーでサーバーレス配置を使用する場合は、[はじめに](/ja/products/sandboxes/get-started#forge-api-key)に記載されている、認証を明示的に行うセットアップ手順に従ってください。

<h2 id="choose-a-lifetime">
  有効期間を選択する
</h2>

有効期間は、サンドボックスを実行できる時間の上限です。有効期間が切れると、作業が進行中であってもプラットフォームはサンドボックスを終了します。ワークロードが完了した場合や、ユーザーがサンドボックスを停止した場合は、それより早く終了することがあります。

| 設定 | サーバーレス | CKS |
| - | - | - |
| サンドボックスごとの有効期間 | ソフトウェア開発キット (SDK) またはサンドボックス作成リクエストで設定します。 | SDK またはサンドボックス作成リクエストで設定します。 |
| ランナーのポリシーのデフォルト | CoreWeave が管理します。 | 管理者がランナーのポリシーで `constraints.lifecycle.default_lifetime_seconds` を設定できます。 |
| 最大ライフタイム | 30 日。 | 30 日 (独自のクラスターを使用する場合も同様)。 |

明示的に指定した有効期間は、ランナーのポリシーのデフォルトよりも優先されます。有効期間を省略すると、プラットフォームは該当するポリシーのデフォルトを使用します。正の値のデフォルトが設定されていない場合、プラットフォームは 10 分 (600 秒) を使用します。長時間実行する作業では、デフォルトに頼らず有効期間を明示的に設定してください。

30 日を超えるリクエストはプラットフォームによって拒否されます。値 `0` は実行時間が無制限であることを意味しません。CKS のポリシーでプラットフォームの最大値を引き上げることはできません。

サンドボックスの開始後に有効期間を延長することはできません。作成時に十分な時間を指定し、期限までに作業を保存できるよう計画してください。

<h2 id="set-the-lifetime-when-creating-a-sandbox">
  サンドボックス作成時に有効期間を設定する
</h2>

Python では `max_lifetime_seconds` を使用します。以下の例では、上限である 30 日間をリクエストし、後で再接続できるようにサンドボックス ID を出力します。使用する配置モードのタブを選択してください。

<Tabs>
  <Tab title="Serverless">
    ```python title="Serverless サンドボックスを作成する" theme={"system"}
    from cwsandbox import AuthStrategy, Sandbox

    sandbox = Sandbox.run(
        "sleep", "infinity",
        auth=AuthStrategy.COREWEAVE_API_KEY,
        placement_mode="serverless",
        container_image="python:3.11",
        resources={"cpu": "2", "memory": "4Gi"},
        max_lifetime_seconds=30 * 24 * 60 * 60,
    )
    sandbox.wait()
    print(sandbox.sandbox_id)
    ```
  </Tab>

  <Tab title="CKS">
    ```python title="CKS ランナー上にサンドボックスを作成する" theme={"system"}
    from cwsandbox import AuthStrategy, Sandbox

    sandbox = Sandbox.run(
        "sleep", "infinity",
        auth=AuthStrategy.COREWEAVE_API_KEY,
        placement_mode="cks",
        runner_ids=["[RUNNER-ID]"],
        container_image="python:3.11",
        resources={"cpu": "2", "memory": "4Gi"},
        max_lifetime_seconds=30 * 24 * 60 * 60,
    )
    sandbox.wait()
    print(sandbox.sandbox_id)
    ```
  </Tab>
</Tabs>

スクリプトを実行すると、サンドボックス ID が出力されます。これらの例では、`sleep infinity` でプライマリプロセスを動かし続けるため、スクリプトの終了後もサンドボックスは実行されたままになります。サンドボックスを使い終わったら、停止してください。

有効期間は、他のクライアントインターフェースからも同様に設定できます。

| インターフェース | 有効期間の設定 |
| - | - |
| Python SDK | `Sandbox.run(max_lifetime_seconds=2592000, ...)`。クライアント全体で共有するデフォルトを設定するには、`SandboxDefaults(max_lifetime_seconds=2592000)` を使用します。引数を明示的に指定すると、クライアントのデフォルトが上書きされます。 |
| TypeScript SDK | `client.run()` のオプションに `maxLifetimeSeconds: 2592000` を渡します。 |
| REST API | `POST /v1/sandboxes` の JSON ボディで `spec.maxLifetimeSeconds` を `2592000` に設定します。 |
| Compose ファイルのインポート | `POST /v1/sandboxes:createFromFile` で、top-level のリクエストフィールド `maxLifetimeSeconds` を `2592000` に設定します。有効期間はリクエスト単位の設定であり、Compose のサービスプロパティではありません。 |

リクエスト形式の詳細については、[API リファレンス](/ja/products/sandboxes/reference/control-plane-api)および[Compose ファイルからサンドボックスを作成する](/ja/products/sandboxes/create-from-file)を参照してください。Python クライアントのデフォルトについては、[サンドボックスの設定](/ja/products/sandboxes/client/guides/sandbox-configuration#max_lifetime_seconds)を参照してください。

<h2 id="set-a-default-for-a-cks-runner">
  CKS ランナーのデフォルトを設定する
</h2>

ランナーのポリシーのデフォルトは、有効期間を個別にリクエストしない新しいサンドボックスに適用されます。CKS ランナー上のワークロードに通常より長い有効期間を与えたい場合に使用します。ポリシーを編集するには、`SANDBOX_ADMIN` アイデンティティとアクセス管理 (IAM) action が必要です。

ポリシーを更新すると、ポリシードキュメント全体が置き換えられます。抜粋を既存のポリシーの代わりに送信しないでください。送信すると、ポリシー内のその他の制約が削除されます。

1. 対話型ターミナルで、認証済みの [CoreWeave Intelligent CLI](https://github.com/coreweave/cwic) を使用してランナーの現在のポリシーを開きます。

   ```bash theme={"system"}
   cwic sandbox runner policy edit [RUNNER-ID]
   ```

2. `constraints.lifecycle.default_lifetime_seconds` に任意の秒数を設定します。次の YAML は、デフォルトを 30 日に設定する場合の抜粋です。既存のポリシーのその他の部分はそのまま残してください。

   ```yaml title="ランナーのポリシーの抜粋" theme={"system"}
   constraints:
     lifecycle:
       default_lifetime_seconds: 2592000
   ```

3. 保存してエディターを閉じ、更新を送信します。ポリシーを取得して値を検証します。

   ```bash theme={"system"}
   cwic sandbox runner policy get [RUNNER-ID]
   ```

マネージドランナーの REST API を使用してポリシーを更新することもできます。JSON では、フィールド名は `policy.constraints.lifecycle.defaultLifetimeSeconds` です。読み取り、編集、置き換えまでの完全な手順については、[ポリシーを更新する](/ja/products/sandboxes/profiles/configure#update-a-policy)を参照してください。

デフォルトは、更新後に作成されたサンドボックスに適用されます。実行中のサンドボックスの有効期間は延長されません。サンドボックスは、最大 30 日までの範囲で別の有効期間を明示的にリクエストできます。ポリシーに `max_lifetime_seconds` を追加しないでください。このフィールドは提供終了となっており、CoreWeave Intelligent CLI はこのフィールドが残っているポリシードキュメントを拒否します。ポリシーではデフォルトを指定し、最大値はプラットフォームによって強制されます。

<h2 id="keep-working-across-client-sessions">
  クライアントのセッションをまたいで作業を継続する
</h2>

サンドボックスを起動した Python スクリプトの終了後もサンドボックスを存続させたい場合は、前述の例のようにスタンドアロンのサンドボックスを作成します。`with Sandbox.run(...)` コンテキストを使用すると、設定済みの有効期間が 30 日であっても、ブロックを抜けた時点でサンドボックスが停止します。また、`Session` も自身が所有するサンドボックスのクリーンアップを管理します。詳しくは [Cleanup patterns](/ja/products/sandboxes/client/guides/cleanup-patterns) を参照してください。

別のスクリプトから再接続するには、`[SANDBOX-ID]` を作成時に出力された ID に置き換えます。認証情報には、サンドボックスの作成時と同じものを使用してください。以下の例では、セットアップ時に取得した CoreWeave API アクセストークンを使用します。

```python title="Reconnect to a running sandbox" theme={"system"}
from cwsandbox import AuthStrategy, Sandbox

sandbox = Sandbox.from_id(
    "[SANDBOX-ID]",
    auth=AuthStrategy.COREWEAVE_API_KEY,
).result()
result = sandbox.exec(["echo", "Connected"]).result()
print(result.stdout)
```

このコマンドを実行すると、`Connected` と出力されます。再接続しても有効期間はリセットされません。作業が終わったら、サンドボックスを明示的に停止してください：

```python title="Stop a sandbox" theme={"system"}
from cwsandbox import AuthStrategy, Sandbox

sandbox = Sandbox.from_id(
    "[SANDBOX-ID]",
    auth=AuthStrategy.COREWEAVE_API_KEY,
).result()
sandbox.stop().result()
```

<h2 id="plan-for-expiry">
  有効期限切れに備える
</h2>

サンドボックスのライフタイムが切れる前に、結果やチェックポイントをサンドボックスの外部に保存してください。ワークフローに 30 日を超える時間が必要な場合は、代わりのサンドボックスを作成し、保存済みの状態から再開してください。サポートされるストレージとスナップショットのオプションについては、[サンドボックスのボリューム](/ja/products/sandboxes/volumes) および [ファイルシステムスナップショット](/ja/products/sandboxes/file-system-snapshots) を参照してください。

サンドボックスのライフタイムは、コマンドや API リクエストのタイムアウトとは別物です。`timeout_seconds` や `request_timeout_seconds` を増やしても、サンドボックスのライフタイムは延長されません。両者の相違点については、[タイムアウト](/ja/products/sandboxes/client/guides/sandbox-configuration#timeouts) を参照してください。
