本教程演示如何使用 HTTP API 在 Azure 容器应用动态会话中执行 JavaScript 代码。
在本教程中,你将:
- 创建新的代码解释器会话
- 为会话池设置适当的安全上下文
- 传入要运行的容器应用的 JavaScript 代码
先决条件
在开始本教程之前,需要以下资源。
| Resource | Description |
|---|---|
| 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 cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.查询 Azure 订阅 ID 并将值设置为变量。
SUBSCRIPTION_ID=$(az account show --query id --output tsv)设置此过程中使用的变量。
在运行以下命令之前,请确保将占位符
<>替换为您自己的值。RESOURCE_GROUP=<RESOURCE_GROUP_NAME> SESSION_POOL_NAME=<SESSION_POOL_NAME> LOCATION="chinanorth3"可以使用这些变量在以下步骤中创建资源。
设置要用于创建资源组的订阅
az account set -s $SUBSCRIPTION_ID创建资源组。
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION
创建代码解释器会话池
az containerapp sessionpool create使用命令创建一个 Node.js 会话池,该池负责执行任意 JavaScript 代码。
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。
查询用户对象 ID。
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 。 确保令牌包含一个受众声明 (aud),其值为https://dynamicsessions.io。
获取访问令牌。
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