azure - Azure Functions Core Tools 无法连接到专用终结点
问题描述
我正在使用 Azure 函数核心工具在 Azure VM (Ubuntu 18.04) 上运行一个 blob 触发的函数。
我想要做的是在不使用服务端点的情况下获取 blob 的信息。
在我的 VNet 中,我有:
使用 Core Tools 运行功能的 VM1
VM2 是一个 DNS 服务器,并通过如下所示的 HTTP 请求戳 VM1;
- curl -X POST http://{VM1 的私有 IP}:7071/admin/functions/{my blob Function}
-H "content-type:application/json" -d "{'input':'myContainer/myFolder/myBlob '}”
- curl -X POST http://{VM1 的私有 IP}:7071/admin/functions/{my blob Function}
具有专用终结点的 Blob 存储
当我在我的子网上启用服务端点Microsoft.Storage时,VM1 可以运行 blob 触发的函数,可以被 VM2 戳,并获取 blob 的信息(在 curl 中提供)。
但是,一旦我删除了服务端点,VM1 就无法运行该功能并出现以下错误,显然无法连接到存储:
发生了未处理的异常。主机正在关闭。
Microsoft.WindowsAzure.Storage:此请求无权执行此操作。
发生了未处理的异常。主机正在关闭。
Microsoft.WindowsAzure.Storage:操作已取消。System.Private.CoreLib:操作已取消。
从 VM1 和 VM2 到存储的私有 IP 的名称解析自然没问题,因为它们位于同一子网中。
有什么办法可以解决这个问题,比如向我的路由表添加路由?
先感谢您。
编辑 #1
其他不使用私有端点的函数,如 HTTP 触发的函数不受影响并且是可调用的。
我猜 Core Tools 运行时不支持 Private Link,因为如果我希望 Azure Functions 上的函数(而不是本地计算机上的 Core Tools)连接到专用终结点,则需要使用 Premium 计划或 App Service Plan。
解决方案
在这种情况下,当您Microsoft.Storage
为子网启用服务点时,Azure 将在该子网的路由表中添加一条到存储服务的公共 IP 地址的路由。Azure 服务端点通过 Microsoft 的骨干网络基础设施提供与 Azure 服务的直接连接。使用服务终结点不会从 Azure 存储帐户中删除公共终结点——它只是流量的重定向。
为 Blob 存储启用专用终结点时,只能通过虚拟网络访问 Blob 资源。blob 触发的函数将使用特定于资源的私有 IP 地址与指定资源进行通信。如果您已删除子网的服务端点,则没有通过 next-hop 到存储资源的公共 IP 的默认路由virtual network service endpoint
。Azure 服务的出站流量默认通过 Internet。因此,其他不使用私有端点的函数,如 HTTP 触发的函数不受影响并且是可调用的。
总之,Azure VM 上的 Azure Functions Core Tools 似乎不可能在不使用服务终结点的情况下连接到专用终结点以进行 Blob 存储。
希望这是有道理的,有关更多信息,您可以阅读以下博客:
推荐阅读
- redux - 带有 Fluxor 的 Blazor:我可以拥有同一商店的多个实例吗?
- javascript - 在 Web 应用程序上创建 Blockly 迷宫
- cplex - 在 CPLEX OPL 中,我想使用变量创建条件
- outlook - 日历更新问题(.ics 文件)
- java - 我无法在 Java 中使用外部库
- python - 我应该在新的 Django 虚拟环境中重新开始我的项目吗
- amazon-web-services - AWS lambda - sam build 在为火炬库构建依赖项时返回错误
- twitter - 了解过滤流的 Twitter v2 API 速率限制
- sql - 如何使用 BigQuery 生成日期数组并转发填充缺失的数据?
- npm - 未找到导入的项目“C:\Microsoft.Cpp.Default.props”