Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

サンドボックスのライフサイクル

最終更新 Markdown で表示Agent セットアップ

アプリは サンドボックス ID でサンドボックスを指定します。コマンドを実行し、ローカルファイルを保持する Linux 環境が コンテナ です。ID は、個々のコンテナより長く残ることがあります。

この区別は、プロセス、ターミナル、ファイル、およびアイドル停止や置換のあとの復旧に関わります。

サンドボックス ID とコンテナ

多くのアプリは、ユーザーまたはタスクごとに 1 つのサンドボックスを使います。

const sandbox = getSandbox(env.Sandbox, "user-123");
const sandbox = getSandbox(env.Sandbox, "user-123");
意味
サンドボックス ID getSandbox に渡す文字列です(例: "user-123")。あとから同じサンドボックスに到達するには、同じ ID を使います。
Durable Object その ID の背後にあるコーディネーターです。同じ ID は、同じ Durable Object の識別に対応します。
コンテナ そのサンドボックス向けの Linux 処理を実行する、現在の Containers インスタンスです。
プロセスまたはターミナル 現在の コンテナ内で動くプログラム、または対話型 PTY です。
ローカルファイル そのコンテナのディスク上のファイルです(例: /workspace 配下)。

同じサンドボックス ID でも、同じコンテナとは限りません。 コンテナが停止または置換されたあと、その ID 向けの次の処理は新しいコンテナで動くことがあります。

コンテナが起動するタイミング

getSandbox() はすぐに戻ります。この呼び出しだけではコンテナは起動しません。

コンテナは、操作が必要になったときに起動します。たとえば exec()createTerminal()、ファイルの書き込みです。デプロイ後またはアイドル後の初回起動は、ウォームな呼び出しより時間がかかることがあります。コンテナがまだ準備できていない場合、SDK は ContainerUnavailableError を投げることがあります。このエラーは、操作がコンテナ内で開始されなかったことを意味します。エラーと復旧 を参照してください。

コンテナの実行中

サンドボックス ID 向けにコンテナが起動しているあいだ:

  • プロセスとターミナルは、終了するか、停止するまで動き続けます。
  • ローカルファイルは、そのコンテナ内で使えます。
  • あとからの Worker リクエストは、その コンテナにリソースが残っているかぎり、getProcess または getTerminal を呼んで続行できます。

プロセスの詳細: プロセスの存続期間。ターミナル: ターミナル

コンテナが停止または置換されるとき

コンテナは永続しません。Cloudflare は、アイドル時間が過ぎると停止することがあります。障害のあとや、通常運用での置換時(一部のデプロイ後など)にも停止します。

その場合:

  • アプリは、同じサンドボックス ID を使い続けます。
  • 古いコンテナのプロセスとターミナルはなくなります。ID とライブのログバッファーも含みます。
  • 古いコンテナのローカルファイルは、アプリが復元しないかぎりなくなります(バックアップ やマウントしたバケットなど)。
  • 次に実際の作業が走ると、同じサンドボックス ID 向けに 新しい コンテナが起動することがあります。
  • 以前のコンテナのハンドルはフェイルクローズします。リソースが現在のコンテナにない場合、getProcessgetTerminalnull を返します。これらの照会は、答えを返すためだけにコンテナを起動しません。

あとで作業を続けるには、プロセス ID やターミナル ID だけでなく、ジョブ(実行内容、cwdenv、アプリのチェックポイント)を保存します。

アイドル停止、置換、destroy

イベント 残るもの なくなるもの
アイドル停止 サンドボックス ID と Durable Object の識別 停止したコンテナのプロセス、ターミナル、ローカルファイル
置換(障害、デプロイ、その他の置換) サンドボックス ID と Durable Object の識別 以前のコンテナについてはアイドル停止と同じ
destroy() サンドボックス ID の文字列は、あとから再利用できます その世代の以前の作業は完了したものとして扱います

アイドル停止または置換のあと、次に実際の作業が走ると、同じサンドボックス ID 向けに 新しい コンテナが起動することがあります。古いプロセスとターミナルのハンドルは無効です。復旧手順: エラーと復旧

keepAlivesleepAfter はアイドル動作を変えます。1 つのコンテナインスタンスを永続させるわけではありません。安定版の ライフサイクル APIサンドボックスオプション を参照してください(@next では transport と default-session のオプションは無視します)。

コンテナより長く残る状態

アプリ が保持(または復元)したものだけが、新しいコンテナでも残ります。

必要なこと コンテナの外に置くもの
あとからサンドボックスを見つける サンドボックス ID
あとのリクエストで作業を続ける 現在のコンテナにリソースがある あいだ のリソース ID と、ない場合に再起動できる十分なジョブコンテキスト
停止や置換を耐える ジョブ: コマンドまたはターミナルの設定、cwdenv、チェックポイント
新しいコンテナのあともファイルを残す バックアップのメタデータ、マウント設定、または別の永続ストア

関連情報

役に立ちましたか?