教學課程:在 Azure Container Apps 的程式代碼解釋器會話中執行 JavaScript 程式代碼 (預覽)
本教學課程示範如何使用 HTTP API 在 Azure Container Apps 動態會話中執行 JavaScript 程式代碼。
在本教學課程中,您會:
- 建立新的程式代碼解釋器會話
- 為您的工作階段集區設定適當的安全性內容
- 傳入 JavaScript 程式代碼,讓容器應用程式執行
注意
Azure Container Apps 動態作業階段中的 JavaScript 程式代碼解釋器功能目前為預覽狀態。 如需詳細資訊,請參閱 預覽限制。
必要條件
開始本教學課程之前,您需要下列資源。
資源 | 描述 |
---|---|
Azure 帳戶 | 您需要具有有效訂用帳戶的 Azure 帳戶。 如果您沒有,可以免費建立一個。 |
Azure CLI | 安裝 Azure CLI。 |
設定
首先,使用最新的更新準備 Azure CLI 並登入 Azure。
將 Azure CLI 更新為最新版本。
az upgrade
註冊
Microsoft.App
資源提供者。az provider register --namespace Microsoft.App
安裝最新版的 Azure 容器應用程式 CLI 延伸模組。
az extension add \ --name containerapp \ --allow-preview true --upgrade
登入 Azure。
az login
查詢您的 Azure 訂用帳戶標識碼,並將值設定為變數。
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
設定此程式中所使用的變數。
執行下列命令之前,請務必以您自己的值取代 所包圍的
<>
佔位元。RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION="northcentralus"
您可以使用這些變數,在下列步驟中建立資源。
設定您要用來建立資源群組的訂用帳戶
az account set -s $SUBSCRIPTION_ID
建立資源群組。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION
建立程式代碼解釋器會話集區
az containerapp sessionpool create
使用 命令建立負責執行任意 JavaScript 程式代碼的Node.js會話集區。
az containerapp sessionpool create \
--name $SESSION_POOL_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--max-sessions 5 \
--network-status EgressEnabled \
--container-type NodeLTS \
--cooldown-period 300
設定程式代碼執行 API 的角色指派
若要與會話集區的 API 互動,您必須搭配角色指派使用身 Azure ContainerApps Session Executor
分識別。 在本教學課程中,您會使用 Microsoft Entra ID 使用者身分識別來呼叫 API。
查詢您的使用者物件識別碼。
USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
將角色指派給您的身分識別。
az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee-object-id $USER_OBJECT_ID \ --assignee-principal-type User \ --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME"
取得持有人權杖
若要直接存取會話集區的 API,請產生存取令牌以包含在要求的標頭中 Authorization
。 請確定令牌包含具有 值https://dynamicsessions.io
的物件 (aud
) 宣告。 如需詳細資訊,請參閱 驗證和授權 規則。
取得存取權杖。
JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
建立變數來保存要求標頭。
AUTH_HEADER="Authorization: Bearer $JWT_ACCESS_TOKEN"
此標頭會伴隨您對應用程式端點所做的要求。
取得工作階段集區管理端點
使用下列命令傳回應用程式的端點。
SESSION_POOL_MANAGEMENT_ENDPOINT=$(az containerapp sessionpool show -n $SESSION_POOL_NAME -g $RESOURCE_GROUP --query "properties.poolManagementEndpoint" -o tsv)
此端點是您進行 API 呼叫以在程式代碼解釋器會話中執行程式代碼承載的位置。
在您的工作階段中執行程序代碼
既然您有持有人令牌可建立安全性內容,以及工作階段集區端點,您可以將要求傳送至應用程式以執行程式碼區塊。
執行下列命令以執行 JavaScript 程式代碼,以在應用程式中記錄 「hello world」。
curl -v -X 'POST' -H "$AUTH_HEADER" "$SESSION_POOL_MANAGEMENT_ENDPOINT/code/execute?api-version=2024-02-02-preview&identifier=test" -H 'Content-Type: application/json' -d '
{
"properties": {
"codeInputType": "inline",
"executionType": "synchronous",
"code": "console.log(\"hello-world\")"
}
}'
您應該會看到類似下列範例的輸出。
{
"properties": {
"status": "Success",
"stdout": "hello-world\n",
"stderr": "",
"executionResult": "",
"executionTimeInMilliseconds": 5
}
}
您可以在 GitHub 上找到更多 程式碼解釋器 API 範例 。
清除資源
本教學課程中建立的資源會影響您的 Azure 帳單。 如果您不會長期使用這些服務,請執行下列命令來刪除本教學課程中建立的所有內容。
az group delete \
--resource-group $RESOURCE_GROUP