共用方式為


教學課程:在 Azure Container Apps 的程式代碼解釋器會話中執行 JavaScript 程式代碼 (預覽)

本教學課程示範如何使用 HTTP API 在 Azure Container Apps 動態會話中執行 JavaScript 程式代碼。

在本教學課程中,您會:

  • 建立新的程式代碼解釋器會話
  • 為您的工作階段集區設定適當的安全性內容
  • 傳入 JavaScript 程式代碼,讓容器應用程式執行

注意

Azure Container Apps 動態作業階段中的 JavaScript 程式代碼解釋器功能目前為預覽狀態。 如需詳細資訊,請參閱 預覽限制

必要條件

開始本教學課程之前,您需要下列資源。

資源 描述
Azure 帳戶 您需要具有有效訂用帳戶的 Azure 帳戶。 如果您沒有,可以免費建立一個
Azure CLI 安裝 Azure CLI

設定

首先,使用最新的更新準備 Azure CLI 並登入 Azure。

  1. 將 Azure CLI 更新為最新版本。

    az upgrade
    
  2. 註冊 Microsoft.App 資源提供者。

    az provider register --namespace Microsoft.App
    
  3. 安裝最新版的 Azure 容器應用程式 CLI 延伸模組。

    az extension add \
      --name containerapp \
      --allow-preview true --upgrade
    
  4. 登入 Azure。

    az login
    
  5. 查詢您的 Azure 訂用帳戶標識碼,並將值設定為變數。

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  6. 設定此程式中所使用的變數。

    執行下列命令之前,請務必以您自己的值取代 所包圍的 <> 佔位元。

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION="northcentralus"
    

    您可以使用這些變數,在下列步驟中建立資源。

  7. 設定您要用來建立資源群組的訂用帳戶

    az account set -s $SUBSCRIPTION_ID
    
  8. 建立資源群組。

    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。

  1. 查詢您的使用者物件識別碼。

    USER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
    
  2. 將角色指派給您的身分識別。

    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) 宣告。 如需詳細資訊,請參閱 驗證和授權 規則。

  1. 取得存取權杖。

    JWT_ACCESS_TOKEN=$(az account get-access-token --resource https://dynamicsessions.io --query accessToken -o tsv)
    
  2. 建立變數來保存要求標頭。

    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

下一步