你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在自己的基础结构上创建用于混合部署的标准逻辑应用工作流(预览版)
适用于:Azure 逻辑应用(标准)
注意
此功能目前处于预览阶段,使用时需付费,且须遵守 Microsoft Azure 预览版补充使用条款。
对于需要使用、控制和管理自己的基础结构的方案,可以使用 Azure 逻辑应用中的混合部署模型创建标准逻辑应用工作流。 此模型为需要本地处理、存储和网络访问的部分连接的环境提供生成和托管集成解决方案的功能。 基础结构可以包括本地系统、私有云和公有云。 使用混合模型时,标准逻辑应用工作流由 Azure 逻辑应用运行时提供支持,该运行时作为 Azure 容器应用扩展的一部分托管在本地。
有关介绍标准逻辑应用工作流在部分连接的环境中托管和运行位置的体系结构概述,请参阅为标准逻辑应用的混合部署设置基础设施要求。
本操作指南介绍如何在为托管应用设置必要的本地资源后,使用混合部署模型创建和部署标准逻辑应用工作流。
限制
标准逻辑应用的混合部署仅在 Azure Arc-enabled AKS 上 Azure 容器应用所在的相同区域中提供且受支持。
此预览版当前不提供以下功能:
- 托管标识身份验证
- 通过 SAP 内置连接器进行 SAP 访问
- 具有 .NET Framework 的 C# 自定义代码以及名为“在此逻辑应用中调用本地函数”的内置操作
- 用于自定义代码的 XSLT 1.0
Azure Arc-enabled Kubernetes 群集目前不支持对托管 API 连接进行托管标识身份验证。 而是,必须使用 Microsoft Entra ID 创建自己的应用注册。 有关详细信息,请按照本指南后面的这些步骤操作。
某些基于函数的触发器(例如 Azure Blob、Cosmos DB 和事件中心)需要连接到与标准逻辑应用关联的 Azure 存储帐户。 如果使用任何基于函数的触发器,请在 Azure 门户的标准逻辑应用环境变量中,或在 Visual Studio Code 中你的逻辑应用项目的 local.settings.json 文件中,添加以下应用设置并提供存储帐户连接字符串:
"Values": { "name": "AzureWebJobsStorage", "value": "{storage-account-connection-string}" }
先决条件
Azure 帐户和订阅。 如果没有订阅,可以注册免费的 Azure 帐户。
以下本地资源(必须全部存在于同一网络中才能进行所需的连接):
- 连接到 Azure Arc 的 Azure Kubernetes 服务群集
- 用于本地存储工作流运行历史记录、输入和输出以进行处理的 SQL 数据库
- 用于本地存储工作流使用的项目的服务器消息块 (SMB) 文件共享
为了满足这些要求,请设置这些本地资源以支持标准逻辑应用的混合部署。
若要在 Visual Studio Code 中工作,需要适用于 Visual Studio Code 的 Azure 逻辑应用(标准)扩展以及相关先决条件。
提示
如果有新的 Visual Studio Code 安装,请在尝试部署到自己的基础结构之前,确认可以在本地运行基本标准工作流。 此测试运行有助于隔离标准工作流项目中可能存在的任何错误。
创建标准逻辑应用
满足先决条件后,请按照以下步骤为混合部署创建标准逻辑应用:
在 Azure 门户搜索框中,输入“逻辑应用”,,并选择“逻辑应用”。
在“逻辑应用”页工具栏上,选择“添加”。
在“创建逻辑应用”页面上的“标准”下,选择“混合”。
在“创建逻辑应用(混合)”页面上,提供以下信息:
properties 需要 值 说明 订阅 是 <Azure-subscription-name> Azure 订阅名称。
此示例使用“即用即付”。资源组 是 <Azure-resource-group-name> 你在其中创建混合应用和相关资源的 Azure 资源组。 该名称在各个区域中必须独一无二,并且只能包含字母、数字、连字符 (-)、下划线 (_)、括号 (()) 和句点 (.)。
此示例创建一个名为 Hybrid-RG 的资源组。逻辑应用名称 是 <logic-app-name> 逻辑应用名称,在区域中必须是唯一的,并且只能包含小写字母、数字或连字符 (-)。
此示例使用 my-logic-app-hybrid。区域 是 <Azure-region> Azure Arc-enabled AKS 上的 Azure 容器应用支持的 Azure 区域。
此示例使用美国东部。容器应用连接的环境 是 <connected-environment-name> 为逻辑应用创建为部署环境的 Arc-enabled Kubernetes 群集。 有关详细信息,请参阅教程:在 Azure Arc-enabled Kubernetes 上启用 Azure 容器应用。 配置存储设置 是 启用或禁用 继续访问“创建逻辑应用(混合)”页面上的“存储”选项卡。 以下示例显示了 Azure 门户中的逻辑应用创建页面以及示例值:
在“存储”页面上,提供有关之前设置的存储提供程序和 SMB 文件共享的以下信息:
properties 需要 值 说明 SQL 连接字符串 是 <sql-server-connection-string> 以前保存的 SQL Server 连接字符串。 有关详细信息,请参阅创建 SQL Server 存储提供程序。 主机名 是 <file-share-host-name> SMB 文件共享的主机名。 文件共享路径 是 <file-share-path> SMB 文件共享的文件共享路径。 用户名 是 <file-share-user-name> SMB 文件共享的用户名。 密码 是 <file-share-password> SMB 文件共享的密码。 完成后,选择“查看 + 创建”。 确认提供的信息,然后选择“创建”。
Azure 完成部署后,选择“转到资源”。
注意
门户中围绕使用混合托管选项的标准逻辑应用存在几个已知问题。 这些逻辑应用随“容器应用”标签一起显示,这与使用 Workflow Service 计划或应用服务环境 V3 托管选项的标准逻辑应用不同。 有关详细信息,请参阅已知问题和故障排除 - Azure 门户。
在 Azure 门户中,在资源菜单上的“工作流”下,选择“工作流”。
在“工作流”页面工具栏上,选择“添加”以添加空的有状态或无状态工作流。
设计器打开后,通过添加触发器和操作来生成工作流。
有关详细信息,请参阅使用触发器和操作构建工作流。
注意
使用混合托管选项的标准逻辑应用会在将更改保存到子工作流时自动创建新的修订,这是 Azure 容器应用版本控制概念。 此修订可能需要一些时间才能生效,这意味着保存任何更改后,可能需要稍等片刻,再测试工作流。
如果更改仍未显示在工作流中,则可以检查修订是否存在:
在资源菜单上的“修订”下,选择“修订和副本”。
在“修订和副本”页面的“活动修订”选项卡上,检查新修订是否显示在列表中。
有关更多信息,请参阅以下资源:
在 Azure 门户中更改 CPU 和内存分配
若要编辑标准逻辑应用资源的 CPU 和内存设置,请执行以下步骤:
在 Azure 门户中,打开你的标准逻辑应用资源。
在资源菜单上的“设置”下,选择“容器”。
在“容器”页面工具栏上,选择“编辑并部署”,这将打开“编辑容器”窗格。
在“属性”选项卡上的“容器资源分配”下,更改以下值以适应你的方案:
属性 价值 说明 CPU 核心数 - 默认值:1
- 最小值:0.25
- 最大值:2确定要分配给容器实例的 CPU 核心。 可将此值增加 0.25 个核心,直至达到最大值。 此逻辑应用的所有容器实例的总数限制为 2 个核心。 内存 - 默认值:2
- 最小值:0.1
- 最大值:4确定要分配给容器实例的内存容量(以千兆字节 (Gi) 为单位)。 可以将此值增加 0.1 Gi,直到达到最大值。 此逻辑应用的所有容器实例的总容量限制为 4 Gi。 完成后,选择“保存”。
在 Azure 门户中更改副本缩放
可以控制在响应触发器事件时部署的副本范围的自动缩放。 副本是逻辑应用资源修订或版本的新实例。 若要更改此范围的最小值和最大值,可以修改缩放规则以确定触发缩放的事件类型。 有关详细信息,请参阅在 Azure 容器应用中设置缩放规则。
在 Azure 门户中,打开你的标准逻辑应用资源。
在资源菜单上的“设置”下,选择“缩放”。
在“缩放”页面上的“缩放规则设置”下,更改以下值以适应你的方案:
属性 价值 说明 副本数下限 - 默认值:1
- 最小值:0
- 最大值:1000确定在任何给定时间允许修订的最小副本数。 此值将替代缩放规则,并且必须小于最大副本数。 副本数上限 - 默认值:30
- 最小值:0
- 最大值:1000确定在任何给定时间允许修订的最大副本数。 此值替代缩放规则。 完成后,选择“保存”。
在 Azure 门户中控制逻辑应用的入站流量
可以通过启用入口,向公共 Web、虚拟网络和环境中的其他逻辑应用公开你的逻辑应用。 Azure 通过一组规则强制实施入口设置,这些规则可控制连接到逻辑应用的外部和内部流量的路由。 启用入口时,无需创建 Azure 负载均衡器、公共 IP 地址或任何其他 Azure 资源来启用传入 HTTP 请求或 TCP 流量。 有关详细信息,请参阅容器应用中的入口。
注意
启用入口时,默认情况下会将所有流量定向到最新修订。 转到“修订管理”页面以更改流量设置。
在资源菜单上的“设置”下,选择“入口”。
在“入口”页面上的“入口”旁边,选中“已启用”框。
根据方案配置剩余选项。
有关详细信息,请参阅以下文档:
为托管 API 连接设置身份验证
若要在 Azure Arc-enabled Kubernetes 群集上托管的标准逻辑应用工作流中对托管 API 连接进行身份验证,必须使用 Microsoft Entra ID 创建自己的应用注册。 然后,可以将此应用注册的值添加为标准逻辑应用资源中的环境变量,以改为对 API 连接进行身份验证。
使用 Microsoft Entra ID 创建应用注册
Azure 门户
在 Azure 门户中,按照快速入门:将应用程序注册到 Microsoft 标识平台来创建应用注册。
创建完成后,在门户中找到新的应用注册。
在资源菜单上,选择“概述”并保存以下值,稍后需要使用这些值进行连接身份验证:
- 客户端 ID
- 租户 ID
- 客户端机密
对于对象 ID,请执行以下步骤:
在“概述”页面上,选择“本地目录中的托管应用程序”链接进行应用注册,如下所示:
在打开的页面上,复制并保存“对象 ID”值:
现在,将保存的值作为环境变量添加到标准逻辑应用资源。
Azure CLI
若要创建应用注册,请使用 az ad sp create 命令。
若要查看所有属性,请使用 az ad sp show 命令。
在这两个命令的输出中,查找并保存以下值,稍后需要使用这些值进行连接身份验证:
- 客户端 ID
- 对象 ID
- 租户 ID
- 客户端机密
现在,将保存的值作为环境变量添加到标准逻辑应用资源。
将应用注册值添加到标准逻辑应用
在Azure 门户中,转到标准逻辑应用资源。
在资源菜单上的“设置”下,选择“容器”,然后选择“环境变量”选项卡。
有关应用设置和主机设置的详细信息,请参阅编辑应用设置和主机设置。
在工具栏上,选择“编辑并部署”。
在“编辑容器”窗格中,选择“环境变量”,然后选择“添加”。
在下表中,添加具有指定值的每个环境变量:
环境变量 Value WORKFLOWAPP_AAD_CLIENTID <my-client-ID> WORKFLOWAPP_AAD_OBJECTID <my-object-ID> WORKFLOWAPP_AAD_TENANTID <my-tenant-ID> WORKFLOWAPP_AAD_CLIENTSECRET <my-client-secret> 完成后,选择“保存”。
存储和引用客户端 ID 和客户端密码
可以将客户端 ID 和客户端密码值作为机密存储在逻辑应用资源中,然后改为在“环境变量”选项卡上引用这些值。
在 Azure 门户中,转到你的逻辑应用资源。
在资源菜单上的“设置”下,选择“机密”。
在工具栏上,选择 添加。
在“添加机密”窗格中,为每个机密提供以下信息,然后选择“添加”:
密钥 值 WORKFLOWAPP_AAD_CLIENTID <my-client-ID> WORKFLOWAPP_AAD_CLIENTSECRET <my-client-secret>
已知问题和疑难解答
Azure 门户
标准逻辑应用已部署并显示为 Azure 容器应用资源,但该类型显示为“逻辑应用(混合)”。
Azure 将你的标准逻辑应用包含在“容器应用”资源列表中,而不是包含在“逻辑应用”资源列表中。
Azure 容器应用连接的环境将标准逻辑应用列为名为“混合逻辑应用”的“应用类型”。
若要在保存工作流后反映设计器中的更改,可能需要偶尔刷新设计器。
已启用 Arc 的 Kubernetes 群集
在极少数情况下,群集中的内存占用量可能会很高。 若要防止此问题,请横向扩展或为节点池添加自动缩放。
函数主机未运行
部署标准逻辑应用后,确认应用正常运行。
在 Azure 门户中,转到逻辑应用的容器应用资源。
在资源菜单中,选择“概述”。
在“概述”页面上,在“应用程序 URL”字段旁边,选择资源 URL。
如果应用正常运行,浏览器窗口将打开并显示以下消息:
否则,如果应用出现任何故障,请检查 AKS Pod 是否正常运行。 对于 Windows PowerShell,请运行以下命令:
az aks get-credentials {resource-group-name} --name {aks-cluster-name} --admin kubectl get ns kubectl get pods -n logicapps-aca-ns kubectl describe pod {logic-app-pod-name} -n logicapps-aca-ns
有关详细信息,请参阅以下文档:
群集没有足够的节点
如果运行了上一个命令并收到类似于以下示例的警告,则说明群集没有足够的节点进行处理:
Warning: FailedScheduling 4m52s (x29 over 46m) default-scheduler 0/2 nodes are available: 2 Too many pods. preemption: 0/2 nodes are available: 2 No preemption victims found for incoming pod.
若要增加节点数并设置自动缩放,请执行以下步骤:
在 Azure 门户中,转到 Kubernetes 服务实例。
在实例菜单上的“设置”下,选择“节点池”。
在“节点工具”页面工具栏上,选择“+ 添加节点池”。
有关详细信息,请参阅以下文档:
- 在 Azure Kubernetes 服务 (AKS) 中创建群集的节点池
- 在 Azure Kubernetes 服务 (AKS) 中管理群集的节点池
- Azure Kubernetes 服务 (AKS) 中的群集自动缩放概述
- 使用 Azure Kubernetes 服务 (AKS) 中的群集自动缩放程序
未安装 SMB 容器存储接口 (CSI) 驱动程序
运行上述 kubectl describe pod
命令后,如果出现以下警告,请确认是否已正确安装 SMB 文件共享的 CSI 驱动程序:
Warning FailedScheduling 5m16s (x2 over 5m27s) default-scheduler 0/14 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/14 nodes are available: 14 Preemption is not helpful for scheduling.
Normal NotTriggerScaleUp 9m49s (x31 over 14m) cluster-autoscaler pod didn't trigger scale-up: 3 pod has unbound immediate PersistentVolumeClaims
若要确认,请从 Windows PowerShell 窗口运行以下命令:
kubectl get csidrivers
如果显示的结果列表不包含 smb.csi.k8s.io,请从 Windows 命令提示符处运行以下命令:
helm repo add csi-driver-smb
help repo update
helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.15.0
若要检查 CSI SMB 驱动程序 Pod 状态,请从 Windows 命令提示符运行以下命令:
kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/name=csi-driver-smb" --watch
有关详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 中启用容器存储接口 (CSI) 驱动程序。