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

预配和发布机器人

适用于: SDK v4

本文介绍如何使用 Azure CLI 为机器人创建资源、准备机器人进行部署,以及如何将机器人部署到 Azure。

本文假定你的机器人已准备就绪,可供部署。 有关如何创建简单的回响机器人的信息,请参阅 使用 Bot Framework SDK 创建机器人。 还可以使用 Bot Framework 示例存储库中提供的示例之一。

提示

本文为机器人创建 Azure 机器人资源。 使用 Web 应用机器人资源或机器人通道注册资源的现有机器人将继续工作,但无法创建新的使用这些资源类型的机器人。

注意

Bot Framework JavaScript、C# 和 Python SDK 将继续受支持,但 Java SDK 即将停用,最终长期支持将于 2023 年 11 月结束。 仅执行此存储库中的关键安全性和缺陷修复。

使用 Java SDK 构建的现有机器人将继续正常运行。

对于新的机器人生成,请考虑使用 Power Virtual Agents 并参阅选择合适的聊天机器人解决方案

有关详细信息,请参阅机器人构建的未来

先决条件

  • 对于 Java 机器人,请安装 Maven

  • 此过程使用两个 Azure 资源管理器模板(ARM 模板)为机器人创建资源。

    如果没有当前模板,请在 deploymentTemplates 文件夹的机器人项目中创建副本:C#JavaScriptPythonJava

若要使用 Azure CLI 预配和发布机器人,需要:

  • 具有活动订阅的 Azure 帐户。 创建一个免费帐户

  • 安装 Azure CLI

    对于编程语言,请使用以下版本的 Azure CLI。 某些步骤不适用于更高版本的 CLI。

    语言 CLI 版本
    C# 和 JavaScript 2.39.0 或更高版本
    Python 2.36.0
    Java 2.29.2

注意

如果机器人使用其他资源(例如存储服务或语言服务),则需要单独部署这些资源。

规划部署

在开始之前,请做出这些决策。

决策 说明
如何在 Azure 中管理机器人资源的标识 可以使用用户分配的托管标识、单租户应用注册或多租户应用注册。 有关详细信息,请参阅创建标识资源
将在哪个资源组或资源组群中创建你的机器人资源 在熟悉此过程之前,我们建议使用一个资源组。 有关详细信息,请参阅管理 Azure 资源
机器人是区域 还是 全局 有关区域机器人的信息,请参阅 Azure AI 机器人服务中的区域化

可以通过几种不同的方式在 Azure 中管理机器人标识。

  • 作为用户分配的托管标识,因此无需自行管理机器人的凭证。
  • 作为单租户应用。
  • 作为多租户应用。

对用户分配的托管标识和单租户应用类型的支持已添加到版本 4.15.0 中的 Bot Framework SDK 中(适用于 C# 和 JavaScript)。 其他语言或 Bot Framework Composer、Bot Framework Emulator 或 ngrok 不支持这些应用类型。

应用类型 支持
用户分配的托管标识 Azure AI 机器人服务和 C# 和 JavaScript SDK
单租户 Azure AI 机器人服务和 C# 和 JavaScript SDK
多租户 Azure AI 机器人服务、所有 Bot Framework SDK 语言、Composer、Emulator 和 ngrok

重要

不能将 Python 机器人部署到包含 Windows 服务或机器人的资源组。 但是,可以将多个 Python 机器人部署到同一资源组。 在不同资源组中创建其他服务,例如 Azure AI 服务。

Azure 资源

在部署机器人之前,需创建(或 预配)所需的 Azure 资源。 对于某些步骤,你可以使用现有资源,也可以创建新资源。

在开始之前,提前确定你将创建的新资源的名称以及将使用的现有资源的名称可能会很有帮助。 机器人将使用这些类型的资源。

  • 用于预配、发布和管理机器人的 Azure 订阅
  • 一个或多个资源组
  • 用户分配的托管标识 Microsoft Entra ID 应用注册
  • 应用服务计划资源
  • 应用服务资源
  • Azure 机器人资源

跨资源使用的信息

在 Azure 中创建资源时,Azure 将在后续步骤中生成或请求所需的 ID、密码和其他信息。 下表列出了需要记录的资源名称之外的信息、生成的步骤以及所使用的步骤。

注意

其中许多 ID 和密码都是敏感信息。 有关常见安全准则的信息,请参阅 Bot Framework 安全准则

信息 生成或找到的位置 使用位置
租户 ID 登录并选择订阅 使用 Azure CLI 创建应用服务资源使用 Azure CLI 创建或更新 Azure 机器人资源更新项目配置设置
应用类型 创建标识资源 使用 Azure CLI 创建应用服务资源使用 Azure CLI 创建或更新 Azure 机器人资源更新项目配置设置
客户端 ID 创建标识资源 使用 Azure CLI 创建应用服务资源使用 Azure CLI 创建或更新 Azure 机器人资源更新项目配置设置
基本应用服务 URL 使用 Azure CLI 创建应用服务资源 使用 Azure CLI 创建或更新 Azure 机器人资源
应用服务名称 使用 Azure CLI 创建应用服务资源 将机器人发布到 Azure

登录并选择订阅

  1. 打开命令窗口。

  2. 登录 Azure。

    az login
    
    • 将打开一个浏览器窗口。 完成登录过程。
    • 成功后,该命令会输出帐户有权访问的订阅列表。
  3. 若要设置要使用的订阅,请运行:

    az account set --subscription "<subscription>"
    

    对于 <订阅>,请使用要使用的订阅的 ID 或名称。

  4. 如果要创建用户分配的托管标识或单租户机器人,请记录 tenantId 订阅。 你将在接下来的步骤中使用此租户 ID。

提示

如果需要在非公有云中工作,请参阅 使用 Azure CLI 进行 Azure 云管理。

创建资源组

如果还没有合适的资源组,请使用 az group create 该命令创建新的资源组。

az group create --name "<group>" --location "<region>"
选项 说明
名称 要创建的资源组名称。
位置 此区域用于创建资源组。

有关更多详细信息,请参阅使用 Azure CLI 管理 Azure 资源组

创建标识资源

  1. 若要创建用户分配的托管标识,请使用 az identity create 命令。 成功后,该命令将生成 JSON 输出。

    az identity create --resource-group "<group>" --name "<identity>"
    
    选项 说明
    resource-group 要在其中创建标识的资源组名称。
    name 要创建的标识资源的名称。

    有关详细信息,请查看 az 标识 参考。

  2. 在后续步骤中记录所需的值。

    1. 标识资源的资源组名称
    2. 标识资源的名称
    3. 从命令输出中获取的 clientId

使用 ARM 模板创建资源

为机器人创建应用服务和 Azure 机器人资源。 这两个步骤都使用 ARM 模板和 az deployment group create Azure CLI 命令来创建资源或多个资源。

  1. 为机器人创建应用服务资源。 应用服务可以位于新的或现有的应用服务计划中。

    有关详细步骤,请参阅使用 Azure CLI 创建应用服务

  2. 为机器人创建 Azure 机器人资源。

    有关详细步骤,请参阅 使用 Azure CLI 创建或更新 Azure 机器人

重要

可按照任何顺序执行这些步骤。 但是,如果首先创建 Azure 机器人,则需要在创建应用服务资源后更新其消息终结点。

更新项目配置设置

机器人标识信息

按照以下步骤将标识信息添加到机器人的配置文件。 该文件因创建机器人所用的编程语言而异。

重要

Bot Framework SDK 的 Java 和 Python 版本仅支持多租户机器人。 C# 和 JavaScript 版本支持所有三种应用程序类型来管理机器人的标识。

语言 文件名 说明
C# appsettings.json 支持所有三种应用程序类型来管理机器人的标识。
JavaScript .env 支持所有三种应用程序类型来管理机器人的标识。
Java application.properties 仅支持多租户机器人。
Python config.py 仅支持多租户机器人。 将标识属性作为参数提供给 os.environ.get 方法调用。

需要添加的标识信息取决于机器人的应用程序类型。 提供配置文件中的以下值。

仅适用于 C# 和 JavaScript 机器人。

属性
MicrosoftAppType UserAssignedMSI
MicrosoftAppId 用户分配的托管标识的客户端 ID。
MicrosoftAppPassword 不适用。 此处为用户分配的托管标识机器人保留空白。
MicrosoftAppTenantId 用户分配的托管标识的租户 ID。

准备项目文件

在部署机器人之前准备项目文件。

  1. 切换到项目的根文件夹。 对于 C#,根目录是包含 .csproj 文件的文件夹。

  2. 进行一次在发布模式下的清理重建。

  3. 如果之前尚未执行此操作,请运行 az bot prepare-deploy 以将所需的文件添加到本地源代码目录的根目录。 此命令会在机器人项目文件夹中生成 .deployment 文件。

    az bot prepare-deploy --lang Csharp --code-dir "." --proj-file-path "<my-cs-proj>"
    
    选项 说明
    lang 机器人的语言或运行时。 使用 Csharp
    code-dir 放置生成的部署文件的目录。 使用项目的根文件夹。 默认为当前目录。
    proj-file-path 相对于 code-dir 选项,指定机器人的.csproj文件的路径。
  4. 在项目的根文件夹中,创建包含所有文件和子文件夹的 zip 文件。

将机器人发布到 Azure

此时,你已准备好将机器人的代码部署到App 服务资源。

注意

此步骤可能需要几分钟才能完成。 另外,在部署完成后,可能还需要等待几分钟,然后才能使用机器人进行测试。

从命令行运行以下命令,使用 Kudu zip 推送部署对你的应用服务(Web应用)进行部署。

az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-app-service>" --src "<project-zip-path>"
选项 说明
resource-group 包含机器人的Azure资源组的名称。
name 先前使用的应用服务的名称。
src 创建的已压缩项目文件的绝对或相对路径。

提示

默认情况下,此命令将部署到生产槽。 使用可选 --slot 参数指定其他槽。 有关详细信息,请参阅 az webapp deployment source config-zip 命令参考。

通过网上聊天执行测试

  1. 在浏览器中,转到 Azure 门户
  2. 转到机器人资源。
  3. 打开“通过网上聊天执行测试”窗格。
  4. 与部署的机器人交互。

有关机器人注册的详细信息,请参阅使用机器人服务注册机器人

清理资源

如果不打算发布此应用程序,请按以下步骤删除关联的资源:

  1. 在 Azure 门户中打开机器人的资源组。
    1. 选择删除资源组以删除该组及其包含的所有资源。
    2. 在确认窗格中输入资源组名称,然后选择删除
  2. 如果创建了单租户或多租户 APP:
    1. 转到“Microsoft Entra ID”边栏选项卡。
    2. 找到用于机器人的应用注册,并将其删除。

其他资源

有关用于托管机器人的 Azure 应用程序和资源的详细信息,请参阅以下文章。

Subject 文章
Azure CLI 什么是 Azure CLI?
Azure 订阅管理 如何使用 Azure CLI 管理 Azure 订阅
Azure 区域 区域和可用性区域
资源组和资源管理 管理 Azure 资源
托管标识 什么是 Azure 资源的托管标识?
单租户应用和多租户应用 Microsoft Entra ID 中的租户
Web 应用程序 应用服务
Web 应用程序的计算资源 应用服务计划
Azure 资源管理器模板(ARM 模板) 什么是 ARM 模板?如何将 Azure 资源管理器 (ARM) 部署模板与 Azure CLI 配合使用
Azure 计费 计费和成本管理

Kudu 文件

Web 应用部署命令使用 Kudu 来部署 C#、JavaScript 和 Python 机器人。 使用未配置的 zip deploy API 部署机器人的代码时,行为如下所述:

默认情况下,Kudu 假设 zip 文件中的部署已准备好运行,并且在部署期间不需要额外的生成步骤,例如,不需要执行 npm 安装或 dotnet 还原/dotnet 发布。

必须将生成的代码以及所有必要的依赖项包含在要部署的 zip 文件中,否则机器人不会按预期方式工作。 有关详细信息,请参阅 Azure 文档,了解如何将文件部署到App 服务

后续步骤