共用方式為


在 Azure 容器應用程式中使用會話池

工作階段集區能為新集區提供亞秒級的工作階段分配時間,並負責每個工作階段的管理和生命週期。

設定

您可以使用以下 az containerapp sessionpool create 可用的參數來控制工作階段集區的行為。

目標 房產 Description
設定最大會話數 max-sessions 集區中允許的最大並行工作階段數。 在達到最大限制後收到的請求會回傳 404 伺服器錯誤,指示表示池中已無更多會話可分配。
等待時間 cooldown-period 工作階段在工作階段終止之前可以閒置的秒數。 每次呼叫會話的 API 時,閒置時間都會被重置。 值必須介於 3003600之間。
目標會話數量 ready-sessions 集區中要保持就緒的目標工作階段數。

建立集區

建立池的流程會因你是建立程式碼直譯池還是自訂容器池而略有不同。

程式碼直譯器池

要使用 Azure CLI 建立程式碼直譯器會話池,請確保你擁有最新版本的 Azure CLI 和 Azure Container Apps 擴充功能,並使用以下指令:

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

使用 az containerapps sessionpool create 指令建立池。 以下範例建立一個名為 my-session-pool的 Python 程式碼直譯器會話池。 在執行命令之前,請確保將 <RESOURCE_GROUP> 替換為您的資源群組名稱。

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

當你建立會話池時,可以定義以下設定:

Setting Description
--container-type 該使用的程式碼直譯器類型。 支援的值包括PythonLTS、、 NodeLTSShell和 。
--max-sessions 同時允許的最大分配會期數。 最大值為 600
--cooldown-period 終止前允許的閒置秒數。 每次呼叫會話的 API 時,閒置時間都會被重置。 允許的範圍介於 3003600之間。
--network-status 指定是否允許來自工作階段的輸出網路流量。 有效的值為 EgressDisabled (預設值)和 EgressEnabled

這很重要

如果你啟用 egress,session 中執行的程式碼可以存取網際網路。 當程式碼不被信任時,請特別小心,因為它可能被用來執行惡意行為,例如阻斷服務攻擊。

取得管理 API 端點

若要使用帶有 LLM 框架整合的程式碼直譯器會話,或直接呼叫管理 API 端點,你需要池的管理 API 端點。

端點的格式 https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>為 。

要取得會話池的管理 API 端點,請使用 以下 az containerapps sessionpool show 指令。 執行命令之前,請務必將 <RESOURCE_GROUP> 取代為您的資源群組名稱。

az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --query 'properties.poolManagementEndpoint' -o tsv

自訂容器池

要建立自訂容器會話池,你需要提供容器映像檔和池組設定。

你可以使用 HTTP 請求來呼叫或與每個會話互動。 自訂容器必須在你指定的埠口上暴露一個 HTTP 伺服器,才能回應這些請求。

要使用 Azure CLI 建立自訂容器會話池,請確保你擁有最新版本的 Azure CLI 和 Azure Container Apps 擴充功能,並使用以下指令:

az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y

自訂容器會話池需要具備啟用工作負載設定檔的 Azure 容器應用環境。 如果你沒有環境,就用 az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles 指令來建立環境。

請使用指令 az containerapp sessionpool create 建立自訂容器會話池。

以下範例建立一個名為 my-session-pool 的會話池,並附有自訂容器映像 myregistry.azurecr.io/my-container-image:1.0

在發送請求前,請將括號間 <> 的佔位符替換為你的會話池和會話識別碼的適當值。

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --environment <ENVIRONMENT> \
    --registry-server myregistry.azurecr.io \
    --registry-username <USER_NAME> \
    --registry-password <PASSWORD> \
    --container-type CustomContainer \
    --image myregistry.azurecr.io/my-container-image:1.0 \
    --cpu 0.25 --memory 0.5Gi \
    --target-port 80 \
    --cooldown-period 300 \
    --network-status EgressDisabled \
    --max-sessions 10 \
    --ready-sessions 5 \
    --env-vars "key1=value1" "key2=value2" \
    --location <LOCATION>

此指令建立一個包含以下設定的會話池:

參數 價值觀 Description
--name my-session-pool 會話池的名稱。
--resource-group my-resource-group 包含會話池的資源群組。
--environment my-environment 容器應用程式環境的名稱或資源 ID。
--container-type CustomContainer 會話池的容器類型。 必須為自訂容器工作階段的 CustomContainer
--image myregistry.azurecr.io/my-container-image:1.0 要用於工作階段集區的容器映像。
--registry-server myregistry.azurecr.io 容器登錄伺服器主機名稱。
--registry-username my-username 使用者名稱是用來登入容器登錄檔的。
--registry-password my-password 是用來登入容器登錄檔的密碼。
--cpu 0.25 所需的 CPU 核心數。
--memory 0.5Gi 所需的記憶。
--target-port 80 用於輸入流量的工作階段連接埠。
--cooldown-period 300 工作階段在工作階段終止之前可以閒置的秒數。 每次呼叫會話的 API 時,閒置時間都會被重置。 值必須介於 3003600之間。
--network-status EgressDisabled 指定是否允許來自工作階段的輸出網路流量。 有效的值為 EgressDisabled (預設值)和 EgressEnabled
--max-sessions 10 同時可分配的最大會話數。
--ready-sessions 5 持續在工作階段集區中就緒的目標工作階段數目。 如果配置工作階段的速度比補充集區的速度快,請增加此數目。
--env-vars "key1=value1" "key2=value2" 容器裡要設定環境變數。
--location "Supported Location" 工作階段集區的位置。

要檢查會話池的狀態,請使用指令:az containerapp sessionpool show

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

要更新會話池,請使用指令 az containerapp sessionpool update

這很重要

如果會話用來執行不受信任的程式碼,不要包含你不希望不受信任程式碼存取的資訊或資料。 假設該程式碼是惡意的,並且擁有容器的完整存取權,包括其環境變數、秘密和檔案。

管理端點

這很重要

會話識別碼是敏感資訊,建立和管理其價值時需要安全程序。 若要保護此值,您的應用程式必須確保每個使用者或租用戶只能存取自己的工作階段。

未能確保會話存取權可能導致使用者對儲存在會話中資料的濫用或未經授權存取。 欲了解更多資訊,請參閱 會話識別碼

下列端點可用於管理集區中的工作階段:

端點路徑 方法 Description
code/execute POST 在工作階段中執行程式碼。
files/upload POST 將檔案上傳至工作階段。
files/content/{filename} GET 從會話中下載檔案。
files GET 列出工作階段中的檔案。

你要為每個端點建立完整 URL,方法是將池的管理 API 端點與端點路徑串接起來。 查詢字串必須包含 identifier 包含會話識別碼的參數,以及 api-version 值為 2024-02-02-preview的參數。

例如:https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

要取得會話池的管理端點,請使用以下 az containerapp sessionpool show 指令:

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

所有對池管理端點的請求都必須包含一個帶有承載憑證的Authorization標頭。 想了解如何使用池管理 API 進行認證,請參閱 「認證」部分。

每個 API 請求也必須包含帶有會話 ID 的查詢字串參數 identifier 。 這個獨特的會話 ID 讓你的應用程式能與特定會話互動。 欲了解更多關於會話識別碼的資訊,請參閱 會話識別碼

影像快取

當建立或更新會話池時,Azure 容器應用程式會將容器映像快取到池中。 此快取有助於加速建立新工作階段的程序。

圖片的任何變動不會自動反映在會議中。 若要更新映像,請使用新的映像標籤來更新工作階段集區。 使用唯一標記進行每次圖片更新,以確保新圖片能夠被提取。