Azure 容器應用程式 沙盒提供快速、安全且短暫的運算環境,內建暫停與恢復功能。 沙盒是容器應用程式中一流的資源類型(Microsoft.App/SandboxGroups),與應用程式、工作及動態會話並列。
Important
若要管理及建立沙盒,您需要 Azure 角色 Container Apps SandboxGroup Data Owner。 將此角色指派給所有建立和管理沙盒的使用者。
建立並管理沙盒環境
你可以在 Sandboxes 入口網站建立和管理沙盒,或透過程式化使用 Azure 容器應用程式 CLI 或 SDK。
容器應用程式沙盒的主要特徵
亞秒級啟動:沙箱從預熱集區佈建,以提供近乎即時的可用性。
高度隔離:每個沙盒都在各自獨立的安全邊界內運作,可安全地執行不受信任的程式碼。
縮放到零:停止沙盒時,你不支付 CPU 或記憶體費用。
擴展:服務可視需要同時運行數千個沙箱。
OCI 容器映像支援:使用附帶的公開映像檔,或自帶容器映像檔作為沙盒根檔案系統。
暫停與恢復:擷取包含記憶體與磁碟在內的完整狀態快照,並可稍後在不到一秒內恢復。
生命週期控制:您可以管理完整的沙盒生命週期,包括狀態快照、持久儲存,以及網路政策(包括出口與入口)。
何時使用沙盒
當你需要有明確生命週期控制、持久狀態或透過 SDK 可程式存取的隔離運算環境時,可以使用沙盒。
| 劇本 | 要使用沙盒嗎? | 原因為何 |
|---|---|---|
| 具備狀態保留的 AI 程式碼執行 | Yes | 在任務之間暫停,恢復時完整保留上下文 |
| 開發環境 | Yes | 隨需啟用、可暫停且可跨工作階段保留狀態的環境 |
| 代理工作流程 | Yes | 讓 AI 代理在任務邊界間擁有持久且隔離的工作空間 |
| 互動式使用者工作階段 | Yes | 每個使用者都有自己獨立的運算環境 |
| 安全多租戶運算 | Yes | 可針對多個租用戶執行不受信任工作負載的強式隔離 |
| 突發工作負載 | Yes | 依需求將沙盒數量從零擴展至數千個 |
| CI/CD 管線 | Yes | 閒置時可縮減至零的臨時建置與測試環境 |
選擇合適的容器應用程式計算選項
請使用以下表格選擇適合您工作負載的容器應用運算類型。
| 計算類型 | 最適合用於 | Lifecycle | State |
|---|---|---|---|
| 應用程式 | 長期服務、API、網頁應用程式 | 連續 | 無狀態(外部狀態儲存) |
| 工作 | 執行至完成的任務、批次處理 | 開始→跑→完成 | 無狀態 |
| 動態會議 | 受控程式碼執行,LLM 生成的指令碼 | 由工作階段集區管理 | 暫時 |
| 沙箱 | 具備生命週期控制的可程式隔離計算 | 你管理:建立、暫停、繼續、刪除 | 具狀態 (快照集、磁碟區) |
關鍵概念
先決條件
要建立或管理沙盒,你需要Azure角色指派容器應用程式 沙箱群組資料擁有者。 沒有這個角色,你無法執行沙盒操作。 在 Azure 入口網站或使用 Azure CLI 中,指定此角色於所需範圍(Azure 訂閱或 Azure 資源群組)。
在執行以下指令前,先用你自己的值替換周圍的 <> 佔位符。
az role assignment create \
--assignee "<USER_EMAIL_OR_OBJECT_ID>" \
--role "Container Apps SandboxGroup Data Owner" \
--scope "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>"
沙箱群組
沙盒群組是沙盒的最高層級管理界線。 它是 Azure Resource Manager(ARM)資源,你可以在資源群組和區域中建立。 所有沙盒、磁碟映像檔、快照、磁碟區和密鑰的範圍皆限定於某個沙盒群組。
使用沙盒群組來依應用程式、團隊或環境組織沙盒。
沙箱
沙盒是沙盒群組中一個獨立的計算實例。 每個沙箱都會從磁碟映像或快照集執行,並有自己的 CPU、記憶體、磁碟和網路界限。
你透過執行指令、管理檔案、開放埠口以及控制生命週期狀態來與沙盒互動。
磁碟映像檔
磁碟映像是轉換為沙箱根檔案系統使用的 OCI 容器映像。 你可以使用公開圖片,或從自己的容器登錄檔建立私人圖片。
你可以從以下方式建立磁碟映像檔:
- 公開映像檔:所有沙盒群組皆可使用預建映像檔。
- 容器登錄映像:可從公開或私人登錄檔拉取,並可選擇性認證。
Snapshots
快照捕捉運行中的沙盒完整狀態,包括記憶體與磁碟。 使用快照來:
- 暫停並繼續:暫停沙盒,稍後恢復,所有程序和資料都保持完整。
- 複製環境:從已知良好狀態建立新沙箱。
- 分享基準:將預先設定的環境分散在團隊各處。
Volumes
Microsoft 會管理磁碟區,並提供可掛接至沙箱的持續性儲存體。 有兩種音量類型可供選擇:
| 磁碟區類型 | Description |
|---|---|
| Azure Blob | 跨多個沙盒(上傳與下載、持續存在的產物)共享資料。 可同時掛載到多個沙盒中。 |
| 資料磁碟 | 適用於資料庫、組建快取和大型工作集的高效能磁碟區。 同一時間只能掛載至一個沙盒。 |
生命週期狀態
沙盒會經歷以下幾個狀態:
| State | Description |
|---|---|
| Running | 主動執行,使用 CPU 與記憶體 |
| 已停止 | 被使用者、API 或生命週期政策所阻止 |
當沙盒停止時,操作會根據暫停模式(見下節)擷取並保留快照。
你可以為每個沙箱設定生命週期政策:
- 自動暫停:在可設定的逾時時間後,暫停閒置的沙箱。 當沙盒沒有入口(進入)流量、沒有程式碼執行(透過執行 API)、沒有互動式 shell 會話,也沒有檔案操作時,就會進入閒置狀態。
- 暫停模式:可選擇記憶體模式(完整快照-磁碟+記憶體)或磁碟模式(僅保留磁碟)。
- 自動刪除:在沙盒停止後指定天數後自動刪除沙盒。
Architecture
沙盒採用雙平面架構:
| 飛機 | 終點 | Operations |
|---|---|---|
| ARM 控制平面 | management.azure.com |
建立、更新、刪除及列出沙盒群組。 管理 VNet 連線。 |
| 資料平面 | management.azuredevcompute.io |
管理沙盒、磁碟映像檔、快照、檔案、磁碟區、機密、連接埠及輸出政策。 |
你可以透過 ARM 控制平面建立和管理沙盒群組。 所有對個別沙盒及其資源的操作都會經過 ACA 沙盒資料平面,該資料平面被限定在特定的沙盒群組下。
資源層級
每個沙盒都會被分配一個資源層級,檢查其 CPU、記憶體和磁碟的配置。
| Tier | CPU | Memory | 磁碟 |
|---|---|---|---|
| XS | 0.25 核心 | 0.5 GB | 20 GB |
| S | 0.5 個核心 | 1 GB | 20 GB |
| M(預設) | 1 核心 | 2 GB | 20 GB |
| L | 2 個核心 | 4 GB | 40 GB |
| XL | 4 個核心 | 8 GB | 80 GB |
考慮事項
在使用沙盒時請考慮以下幾點:
- Entra ID required:只有Microsoft Entra ID帳號能存取沙盒。 個人 Microsoft 帳號不被支援。
- 網路控制:你可以設定出口政策來控制沙盒的出站流量,包括基於網域的允許或拒絕規則、基於 CIDR 的網路規則,以及 VNet 整合。
沙盒與動態會議
沙盒與 動態會話 都提供容器應用中獨立的計算環境,但它們滿足不同需求。
| 動態工作階段 | 沙箱 | |
|---|---|---|
| 存取模式 | 透過工作階段集區管理端點進行 HTTP 要求路由 | 直接使用 SDK 與 CLI 控制個別沙盒 |
| 狀態 | 短暫,冷卻後被摧毀 | 具狀態並支援暫停、繼續和快照集 |
| 開發商控制 | 集區管理配置和生命週期 | 你管理沙盒生命週期、檔案、埠口和政策 |
| 影像模型 | 內建的程式碼直譯器或自訂容器 | 磁碟映像檔(OCI)、快照、內容套件 |
| 持久性儲存 | 無法提供 | 磁碟區 (Azure Blob、資料磁碟) |
| 網路 | 基本隔離 | 出口策略、VNet 整合、埠管理 |
| SDK | 透過集區端點存取的 REST API | Python SDK (azure-containerapps-sandbox) 與 REST API |
當你需要可抽象化基礎架構的受管理執行環境時,請選擇動態會話。 當你需要對具有狀態持久性的隔離運算進行可程式化控制時,請選擇沙盒。