设置面向单租户 Azure 逻辑应用中的标准逻辑应用工作流的 DevOps 部署

本文介绍如何使用 DevOps 工具和进程,将面向单租户 Azure 逻辑应用的标准逻辑应用项目从 Visual Studio Code 部署到基础结构当中。 根据你更愿意使用 GitHub 还是 Azure DevOps 进行部署,选择最适合你的情况的路径和工具。 可以使用含有示例逻辑应用项目的内含示例,以及使用 GitHub 或 Azure DevOps 部署 Azure 的示例。 有关面向单租户的 DevOps 的详细信息,请查看面向单租户 Azure 逻辑应用的 DevOps 部署概述

先决条件

部署基础结构资源

如果尚未设置逻辑应用项目或基础结构,可以根据你想使用的源和部署选项,使用以下示例项目来部署示例应用和基础结构:

这两个示例均包含逻辑应用用于运行的以下资源。

资源名称 必需 说明
逻辑应用(标准版) 此 Azure 资源包含在单租户 Azure 逻辑应用中运行的工作流。
Functions 高级托管计划或应用服务托管计划 此 Azure 资源可指定用于运行逻辑应用的托管资源,如计算、处理、存储、网络等。

重要提示:在当前体验中,逻辑应用(标准版)资源需要工作流标准托管计划(基于 Functions 高级托管计划)。

Azure 存储帐户 是,同时适用于监控状态和无状态的工作流 此 Azure 资源可存储有关工作流的元数据、访问控制密钥、状态、输入、输出、运行历史记录和其他信息。
Application Insights 可选 此 Azure 资源可为工作流提供监视功能。
API 连接 可选(如果不存在任何连接) 这些 Azure 资源可定义工作流用于运行托管连接器操作(如 Office 365、SharePoint 等)的任何托管 API 连接。

重要提示:在逻辑应用项目中,connections.js 文件包含任何托管 API 连接的元数据、终结点和密钥,以及工作流使用的 Azure 函数。 若要在各种环境中使用不同的连接和函数,请确保实现 connections.js 文件参数化并更新终结点。

有关详细信息,请查看 API 连接资源和访问策略

Azure 资源管理器 (ARM) 模板 可选 此 Azure 资源定义可以重复使用或导出的基线基础结构部署。

API 连接资源和访问策略

在单租户 Azure 逻辑应用中,工作流中的每个托管或 API 连接资源均需要一个关联的访问策略。 此策略需要逻辑应用的标识,以便提供正确的权限来访问托管连接器基础结构。 内含示例项目包含一个 ARM 模板,其中含有所有必要的基础结构资源(包括这些访问策略)。

下图显示了逻辑应用项目与基础结构资源之间的依赖关系:

Conceptual diagram showing infrastructure dependencies for a logic app project in the single-tenant Azure Logic Apps model.

部署逻辑应用(压缩部署)

将逻辑应用项目推送到源存储库后,可以设置生成和发布管道,以将逻辑应用部署到 Azure 内部或外部的基础结构。

生成项目

若要基于逻辑应用项目类型设置生成管道,请完成下表中的相应操作:

项目类型 说明和步骤
基于 Nuget 基于 NuGet 的项目结构以 .NET Framework 为基础。 若要生成这些项目,请务必遵循 .NET Standard 的生成步骤。 有关详细信息,请查看使用 MSBuild 创建 NuGet 包的文档。
基于捆绑包 基于扩展捆绑包的项目并非采用特定语言,且无需任何语言特定的生成步骤。 可以使用任何方法压缩项目文件。

重要说明:请确保 .zip 文件包含实际的生成工件,其中包括所有工作流文件夹、配置文件(如 host.json、connections.json)以及任何其他相关文件。

发布到 Azure 之前

逻辑应用项目的“connections.json”文件内的托管 API 连接是专为 Visual Studio Code 中的本地使用而创建的。 在将项目从 Visual Studio Code 发布到 Azure 之前,必须更新这些项目。 若要在 Azure 中使用托管 API 连接,必须更新其身份验证方法,以便采用正确的格式在 Azure 中使用。

更新身份验证类型

对于使用身份验证的每个托管 API 连接,必须分别将“身份验证”对象从 Visual Studio Code 中的本地格式更新为 Azure 门户格式,如第一个和第二个代码示例所示:

Visual Studio Code 格式

{
   "managedApiConnections": {
      "sql": {
         "api": {
            "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/chinaeast2/managedApis/sql"
      },
      "connection": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/ase/providers/Microsoft.Web/connections/sql-8"
      },
      "connectionRuntimeUrl": "https://xxxxxxxxxxxxxx.01.common.logic-chinaeast2.azure-apihub.net/apim/sql/xxxxxxxxxxxxxxxxxxxxxxxxx/",
      "authentication": {
         "type": "Raw",
         "scheme": "Key",
         "parameter": "@appsetting('sql-connectionKey')"
      }
   }
}

Azure 门户格式

{
   "managedApiConnections": {
      "sql": {
         "api": {
            "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/chinaeast2/managedApis/sql"
      },
      "connection": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/ase/providers/Microsoft.Web/connections/sql-8"
      },
      "connectionRuntimeUrl": "https://xxxxxxxxxxxxxx.01.common.logic-chinaeast2.azure-apihub.net/apim/sql/xxxxxxxxxxxxxxxxxxxxxxxxx/",
      "authentication": {
         "type": "ManagedServiceIdentity",
      }
   }
}

根据需要创建 API 连接

如果要将逻辑应用工作流部署到不同于本地开发环境的 Azure 区域或订阅,则还必须确保在部署之前创建这些托管 API 连接。 Azure 资源管理器模板(ARM 模板)部署是创建托管 API 连接的最简单方法。

以下示例演示了 ARM 模板中的 SQL 托管 API 连接资源定义:

{
   "type": "Microsoft.Web/connections",
   "apiVersion": "2016-06-01",
   "location": "[parameters('location')]",
   "name": "[parameters('connectionName')]",
   "properties": {
      "displayName": "sqltestconnector",
      "api": {
         "id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/sql"
      },
      "parameterValues": {
         "authType": "windows", 
         "database": "TestDB",
         "password": "TestPassword",
         "server": "TestServer",
         "username": "TestUserName"
      }
   }
}

若要查找需要在“properties”对象中使用以便完成连接资源定义的值,可以针对特定连接器使用以下 API:

GET https://management.chinacloudapi.cn/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/{connector-name}?api-version=2016-06-01

在响应中查找“connectionParameters”对象,该对象包含完成该特定连接器的资源定义所需的所有信息。 以下示例演示了 SQL 托管连接的示例资源定义:

{
   "type": "Microsoft.Web/connections",
   "apiVersion": "2016-06-01",
   "location": "[parameters('location')]",
   "name": "[parameters('connectionName')]",
   "properties": {
      "displayName": "sqltestconnector",
      "api": {
         "id": "/subscriptions/{Azure-subscription-ID}/providers/Microsoft.Web/locations/{Azure-region-location}/managedApis/sql"
      },
      "parameterValues": {
         "authType": "windows",
         "database": "TestDB",
         "password": "TestPassword",
         "server": "TestServer",
         "username": "TestUserName"
      }
   }
}

或者可以使用 Azure 逻辑应用中的工作流设计器创建连接时捕获和查看网络跟踪。 按照前文所述,查找发送到连接器的托管 API 的 PUT 调用,并查看请求正文来了解所有必需信息。

发布到 Azure

若要设置部署到 Azure 的发布管道,请执行 GitHub、Azure DevOps 或 Azure CLI 的关联步骤。

注意

Azure 逻辑应用目前不支持 Azure 部署槽位。

对于 GitHub 部署,可以使用 GitHub Actions 部署逻辑应用,例如,Azure Functions 中的 GitHub Actions。 此操作要求传递以下信息:

  • 用于部署的逻辑应用名称
  • 包含实际生成工件的 zip 文件,其中包括所有工作流文件夹、配置文件(如 host.json、connections.json)以及任何其他相关文件。
  • 用于进行身份验证的发布配置文件
- name: 'Run Azure Functions Action'
  uses: Azure/functions-action@v1
  id: fa
  with:
    app-name: 'MyLogicAppName'
    package: 'MyBuildArtifact.zip'
    publish-profile: 'MyLogicAppPublishProfile'

有关详细信息,请查看使用 GitHub Action 持续交付文档。

发布到 Azure 之后

每个 API 连接都有访问策略。 Zip 部署完成后,必须在 Azure 门户中打开逻辑应用资源,并为每个 API 连接创建访问策略,以便为部署的逻辑应用设置权限。 Zip 部署不会为你创建应用设置。 因此,在部署后,必须基于本地 Visual Studio Code 项目中的“local.settings.json”文件创建这些应用设置。

后续步骤

我们希望你就单租户 Azure 逻辑应用体验提供反馈!