你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:在 Socket.IO 无服务器模式下使用 Azure 函数构建聊天应用(预览版)

本文介绍如何使用 Azure Functions 在无服务器模式下使用适用于 Socket.IO 的 Web PubSub 来生成聊天应用。 本教程将指导你在在线工作时使用基于标识的身份验证来确保应用的安全。

项目源使用 Bicep 在 Azure 上部署基础结构,并使用 Azure Functions Core Tools 将代码部署到函数应用。

先决条件

获取示例代码

查找示例代码:Socket.IO 无服务器示例 (TS)

git clone https://github.com/Azure/azure-webpubsub.git
cd ./sdk/webpubsub-socketio-extension/examples/chat-serverless-typescript

部署基础结构

聊天示例需要在 Azure 中部署多个服务:

我们使用 Bicep 来部署基础结构。 该文件位于 ./infra 文件夹中。 使用 az 命令进行部署:

az deployment sub create -n "<deployment-name>" -l "<deployment-___location>" --template-file ./infra/main.bicep --parameters environmentName="<env-name>" ___location="<___location>"
  • <deployment-name>:部署的名称。
  • <deployment-___location>:部署元数据的位置。 请注意,这不是资源部署的位置。
  • <env-name>:名称是资源组名称和资源名称的一部分。
  • <___location>:资源的位置。

查看基础结构

在基础结构版本中,我们在消耗计划中部署了 Azure 函数应用以及函数应用所需的监控器和存储帐户。 我们还在无服务器模式下为 Socket.IO 资源部署了一个 Web PubSub。

为了实现基于标识的身份验证,我们部署了一个用户指定的托管标识,将其分配给函数应用和 Socket.IO 资源,并授予其一些权限:

  • 存储 Blob 数据所有者角色:访问函数应用的存储
  • 监控指标发布者角色:函数应用的访问监控器
  • Web PubSub 服务所有者角色:访问函数应用 Socket.IO 的 Web PubSub

根据将 Azure Functions 应用配置为使用 Microsoft Entra 登录,我们创建了一个服务主体。 为了避免使用服务主体的机密,我们使用了联合标识凭据

将示例部署到函数应用

我们准备了一个 bash 脚本,用于将示例代码部署到函数应用:

# Deploy the project
./deploy/deploy.sh "<deployment-name>"

查看部署详细信息

我们需要执行两个步骤来部署示例应用。

  • 将代码发布到函数应用(使用 Azure Functions Core Tools)

    func extensions sync
    npm install
    npm run build
    func azure functionapp publish <function-app-name>
    
  • 配置适用于 Socket.IO 的 Web PubSub,以便添加一个可以向函数应用发送请求的中心设置。 根据函数应用的 Webhook 提供程序的限制,需要从函数获取一个扩展密钥。 有关详细信息,请参阅触发器绑定。 由于我们使用的是基于标识的身份验证,因此需要在中心设置中指定目标资源,即之前创建的服务主体的 clientId。

    code=$(az functionapp keys list -g <resource-group> -n <function-name> --query systemKeys.socketio_extension -o tsv)
    az webpubsub hub create -n <socketio-name> -g <resource-group> --hub-name "hub" --event-handler url-template="https://${<function-name>}.azurewebsites.net/runtime/webhooks/socketio?code=${code}" user-event-pattern="*" auth-type="ManagedIdentity" auth-resource="<service-principal-client-id>"
    

运行示例应用

在部署代码后,请访问网站以尝试示例:

https://<function-endpoint>/api/index

无服务器聊天应用的屏幕截图。

后续步骤

接下来,可以按照教程逐步编写应用: