コンテンツにスキップ

配備形態 — どこに何が在るか

コアはどの形態でも同じで、変わるのは周縁のアダプタだけです。だから差は小さく具体的で、 だからこそ正確に書く価値があります。ここで「うちの配備では動く」は最も高くつく ドキュメントの誤りです。

形態 ワークスペースの実体 ホームの置き場 選ぶとき
docker ホストの Docker デーモン上のコンテナ ホスト上の bind mount したディレクトリ オンプレの既定。1 台をチームで共有する
native Docker を使わない、サンドボックスされたホストプロセス ホスト上のディレクトリ Docker を入れられない(素の WSL2 など)。単独利用のみ。コンテナ境界が無いので、共有モードでは起動を拒否する
ecs AWS ECS / Fargate のタスク EFS AWS で、インスタンスを管理したくない
ecs-ec2 プールから取った EC2 スロット上のタスク ユーザー毎の EBS ボリューム AWS で、起動レイテンシとディスク性能がインスタンス管理に見合う、または起動が多く Fargate の NAT 経由イメージ取得費用が無視できない(デプロイ先を選ぶ)
kubernetes Kubernetes クラスタ上の、ワークスペース専用の StatefulSet の Pod ユーザー毎の永続ボリューム(ブロックストレージ)。ログインと Claude の状態はもう 1 本の専用ボリューム プレビュー。 すでに Kubernetes を運用している、または Google Cloud で、使わないときは 0 台に縮むワークスペースが欲しい。最初に検証するクラスタは GKE Standard

プレビュー。 kubernetes ランタイムはプレビューです。GKE Standard クラスタで受け入れを確かめて いますが、本番での利用はまだサポートしていません。既知の制約:このランタイムにはブラウザ機能が ありません(ブラウザペインもヘッドレス Chromium もなし)。ホームは 1 つのゾーンに置かれ、 バックアップされません。GKE では、始める前にリージョンの SSD ディスク割り当てが配備に足りている 必要があります(Preconditions)。ロードバランサは、 タイムアウトの設定にかかわらず、使用中の WebSocket を 24 時間で切ります (7. The load balancer)。切れたあとの ターミナルペインには [disconnected] と出て、クリックするかタブに戻るとつなぎ直します。シェルと その tmux セッションは動き続けます。これは接続を強制的に切って確かめたもので、1 日待って確かめた ものではありません。GKE で実測した費用は The bill に あります。試用や 1 チームで使うなら、deploy/gcp/gke の小さなゾーン構成(1 ゾーン、データベースの 待機系なし)で、請求先アカウントの GKE の無料枠が残っていれば既定の構成の床のおよそ半分になります(ほかの クラスタが無料枠を使っていれば、およそ 3 分の 2)。請求額ではなく、実測した単価からの見積もりです。数字と その前提は deploy/gcp/gke/README.md の「Small profile」にあります。

Mac(Apple Silicon)では。 docker は Docker Desktop・OrbStack・colima の上で deploy/compose/docker-compose.macos.yml を重ねて動き、native は Linux VM(Lima または OrbStack の マシン)の中で linux-arm64 パッケージとして動きます。どちらも macOS そのものの上では動きません。 単独利用のみで、127.0.0.1 で使います。何を確認したか・いつ確認し直すかは deploy/macos/README.md、手順は deploy/compose/README.md の「macOS」にあります。

docker は local、ecs は aws、native は wsl、kubernetes は k8s という綴りでも通ります。 それ以外は起動時に失敗します(知らないうちに docker に切り替わったりしません)。 ecs と ecs-ec2 をフラグでなく別プロファイルにしてあるのは意図的です。EC2 プールは 「実績のある 2 リソースのワークスペース」を「6 リソースのもの」に取り替えるので、 配備は明示的に選び、コードを戻さずこの 1 つの値だけで元に戻せるようにしてあります。

機能 docker native ecs ecs-ec2 kubernetes(プレビュー)
複数ユーザーの相互不可視な利用 ✓ — ✓ ✓ ✓
ユーザー毎の CPU / メモリ上限 ✓ — ✓ ✓ ✓
ユーザー毎のディスクサイズ指定 — — ✓ ✓ ✓¹¹
アイドル自動停止 ✓ ✓ ✓ ✓ ✓
ホームを保ったまま停止 / 再開 ✓ ✓ ✓ ✓ ✓
コンテナ内のユーザーガイド ✓¹ ✓¹ ✓² ✓² ✓²
ブラウザペイン ✓ ✓³ —¹² ✓ —¹²
メンバー毎の費用の按分 — — ✓ ✓ —
配備が提供する画像エンジン ✓⁴ ✓⁴ — ✓⁵ ✓⁴
配備が提供するチャットエンジン ✓⁶ ✓⁶ — ✓⁶ ✓⁶
メンバー自身による作り直し・ホームの掃除(危険な操作) ✓ ✓ ✓⁷ ✓¹⁰ ✓¹³
管理者によるホームの掃除(退職処理) ✓ ✓ ✓⁷ ✓⁸ ✓¹³
メンバーのホームのバックアップの削除 — — — ✓⁹ —
Control Plane が封じる秘密をクラウドの鍵サービス(AWS KMS)で守る — — ✓¹⁴ ✓¹⁴ —

¹ ホスト側でステージして、起動時に bind mount する。

² タスクへ mount できるホスト経路が無いので、コンテナが Control Plane の内部 エンドポイントから同じツリーを取りに行く。ツリーは 1 つ、配り方が 2 つ。

³ native が使う lean イメージは Chromium を焼いていないので、初回にオンデマンドで 取得する。

⁴ 自分の網の中ですでに動いている ComfyUI を、環境変数 1 つで指すか、 LAN の ComfyUI・借りたエンジン・OpenAI 互換のサーバを、エンジンの行として並べる (operate/08)。

⁵ フリート自身の GPU を、要求が来たときに買う。Fargate に相当するものは無い。 なおどの形態でも、セッションはメンバー自身の CLI のプラン(Codex / Antigravity)で画像を生成できる。この行が指すのは配備が提供するエンジンの ことである。

⁶ ecs-ec2 ではフリート自身の GPU。docker・native・kubernetes では、自分の網の中ですでに 動いている llama.cpp を環境変数 1 つで指す(operate/10)。

⁷ Control Plane 自身はメンバーの EFS のホームをマウントできないので、スタックが宣言した短い タスク(30-ingress の HomeOpsTaskDef)を起動し、それがファイルシステムをマウントして ファイルを消す。Fargate のタスクは起動に数分かかるので、ボタンへの応答のあとで終わる。 メンバーの作り直しとホームの掃除は、ワークスペースが再び動き出すまで起動中のダイアログ (「作り直し・ホームの掃除で消す分を home から削除しています」)を出す。削除に失敗したら ワークスペースは停止したままで、理由を次の起動までメンバー本人と管理者のメンバー一覧の行に 表示する(失敗のあとで Control Plane が再起動しても消えない)。管理者によるホームの掃除と Workspace の破棄はすぐに応答し、結果はタスクが終わった時点で監査ログに記録する。 破棄はメンバーの EFS のディレクトリも消すようになり、消せなかったものとして並べることは なくなった。このタスクより前のスタック(AF_ECS_HOME_TASK が無い)では、これまでどおり これらのボタンを出さない。ecs-ec2 ではホーム自体は EBS にあるが、Claude の状態と、残す ログイン・接続は EFS にある。Workspace の破棄はそれらを同じタスクで消すので、こちらでも すぐに応答し、結果を監査ログに記録する。 タスクの実行中は、Control Plane が再起動しても、その home の起動と 2 つ目の操作を断る。 操作はタスクの起動前に Control Plane のデータベースへ記録するので、途中で再起動しても何も 失われない。戻ってから 1〜2 分のうちに Control Plane がその操作を拾い、タスクの終了を待つ (起動の応答が失われていたら同じリクエストトークンで ECS に起動を頼み直す。ECS は 2 つ目を 起動せず、すでに起動したタスクを返す)。そのうえで残りを片付ける。メンバーのワークスペースを 起動し(その間にメンバーが削除されていれば起動しない)、失敗ならその理由を表示し、監査ログに 結果を記録し、破棄なら Workspace の行を消す。それまでの起動は上のとおり断る。タスクがどう 終わったかはタスク自身のログ(ワークスペースのロググループ、ストリームの接頭辞 home-ops)にある。 home が解放されるのは、Control Plane がそのタスクの停止を見たときだけである。ECS がタスクを 報告しなくなったときや起動の応答が失われたときは、同じトークンで ECS に頼み直す。最初の要求から 23 時間のうちなら、すでに起動したタスクが返る(それが終わっていれば削除をもう一度実行する。消すのは その操作が消すものだけで、その間に home を起動できた者はいないので安全である)。運用者が要るのは 2 つの場合だけで、どちらも Control Plane のログが示す。このバージョンより前の Control Plane が 残した拒否(記録を持たない)と、要求から 23 時間を過ぎてもタスクの停止を見ていない場合(頼み直しが 2 つ目を起動せず同じタスクを返すことを ECS がもう保証しない)である。af-home/<membership> が 起動したタスクが動いていないことを ECS で確かめた運用者が SSM パラメータ /af-ws/<workspace>/home-task を削除する。後者ではそのあと Control Plane が自分で操作を終える。

⁸ メンバーのホームのボリュームと、その休眠コピーを削除する。次の起動では新しいメンバーと 同じように新しいホームが作られる。この形態ではログイン・接続・Claude の状態はボリュームの外の EFS にあるので、ほかの形態と同じく残る。ただし、その中のファイルを前回の起動のあとで ツールが置き換えていた場合、そのファイルは次の起動までボリューム側にあり、ボリュームと一緒に消える。

⁹ ホームのバックアップを取るのは ecs-ec2 だけで、それも運用者がバックアップを有効にしたとき だけ。ホームの掃除はバックアップを消さない。消すのはメンバーの詳細画面にある別の操作で、 ワークスペースの破棄でも消える。

¹⁰ 要求はホームに印を付けて戻り、それに続く起動が、ホームをマウントした後・ワークスペースが 動き出す前にファイルを消す。そのため起動中のダイアログには削除が起動の一段として出て、 ホームが大きいほどその起動は長くなる。メンバーのマシンが眠っていても、ホームが外れていても、 休眠コピーとして片付けられていても効く。削除に失敗したらワークスペースは停止したままで、 次の起動がやり直す——消すはずのものを残したまま起動することはない。起動がまだ進んでいる間は、 何も止めずにどちらも断るので、起動し終わってから押し直す。ホームの掃除はログインと 接続を名前で残し、前回の起動のあとでツールが置き換えたものも残る。ホームの掃除のあとの最初の 起動では、docker と同じくエージェント CLI を入れ直す。

¹¹ ホームのボリュームの大きさ。増やせるが、減らせない。

¹² ブラウザ機能は一切無い(ブラウザペインも、Chromium の接続も、ヘッドレス Chromium も無い)。 kubernetes では、ワークスペースの pod の Pod Security restricted レベルにより、Chromium の サンドボックスが setuid のヘルパーもユーザー名前空間も使えない。ecs(Fargate)ではタスクに SYS_ADMIN を足せないため、既定の seccomp が名前空間を断り、setuid ヘルパーが使える capability も 無い。サンドボックス無しで動かすことはしないと決めた(ADR 0106 の 2026-10-04 の追記)。 ecs-ec2 はブラウザを使える:docker と同じく、タスクに SYS_ADMIN を足している。Console は入り口を押せない状態にして理由を示す。軽量プレビューは使える (browser-pane.ja.md)。

¹³ メンバーの作り直しとホームの掃除はホームに印を付けて戻り、次の起動がワークスペースが動き出す 前にファイルを消す(ecs-ec2 と同じ)。管理者によるホームの掃除は、ワークスペースを止めた状態で その場で消す。どちらもログイン・接続・Claude の状態を残す。これらは専用の 2 本目のボリュームに あるからだ。ホームのボリューム自体は残る。

¹⁴ 既定はオフで、運用者がスタックで有効にする(保存時の鍵を AWS KMS にする)。 有効にすると、切り替え後に Control Plane 自身が封じる秘密(MCP 接続のヘッダ、サインインのクライアント シークレット、エンジンのトークン、セッションの引き継ぎと共有)は AWS KMS の鍵で封じられ、KMS 鍵を無効に すると読めなくなる。メンバーが保存した資格情報の鍵が KMS で包まれるのは、切り替え後に鍵が初めて保存される ワークスペースだけで、しかも既存のストアを開けるよう今も AF_MASTER_KEY から導かれるので、こちらは マスター鍵だけで足りてしまう。AF_MASTER_KEY はどの配備先でも 引き続き必須。

コマンドは runbook にあり、runbook は操作する対象の隣に置いています。何が起きるか、何に気をつけるかは operate/ で説明します。

形態 runbook
docker(compose) deploy/compose/README.md
native deploy/native/README.md。個人の WSL2 は deploy/local/README-wsl.md
ecs / ecs-ec2 deploy/aws/ecs/README.md
compose を EC2 1 台に載せる deploy/aws/ec2-single/README.md
kubernetes(プレビュー。GKE、およびほかのクラスタ) deploy/kubernetes/README.md

ec2-single は別の runtime プロファイルではありません。VM 上の docker です。 「AWS を使う」と「インスタンスを自分で管理する」が独立した選択だから存在します。

ワークスペースのイメージと、その中のエージェントは、どの形態でも同一の成果物です (分離の目的がまさにこれ)。本当に差が出るのは隔離の強度・ストレージ性能・egress の 統制手段で、これらは Agent Fleet の性質ではなく基盤の性質です。