你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:在 Azure 容器应用的代码解释器会话中运行 JavaScript 代码(预览版)
本教程演示如何使用 HTTP API 在 Azure 容器应用动态会话中执行 JavaScript 代码。
本教程介绍以下内容:
- 创建代新的码解释器会话
- 为会话池设置适当的安全上下文
- 传入容器应用要运行的的 JavaScript 代码
注意
Azure 容器应用动态会话中的 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 订阅 ID,并将值设置为变量。
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
命令创建一个 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
标头中。 确保令牌包含具有值 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