共用方式為


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

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

在本教學課程中,您會:

  • 建立新的程式代碼解釋器會話
  • 為您的工作階段集區設定適當的安全性內容
  • 傳入 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 。 請確定令牌包含具有 值aud的物件 (https://dynamicsessions.io) 宣告。 如需詳細資訊,請參閱 驗證和授權 規則。

  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

下一步