繁体   English   中英

Azure function 连接到 Azure Vnet 问题后的 Blob 存储

[英]Azure function connection to Azure Blob storage behind Vnet issue

我们目前正在迁移到新的 Azure 订阅,并且在执行 Azure 功能时遇到问题,这些功能在我们的旧 Azure 订阅中按预期工作。 我们的旧订阅和新订阅之间的差异在于我们已经建立了一个带有子网的虚拟网络,并在子网后面部署了我们的资源。

我们还必须从旧订阅中的 Azure 应用服务迁移到新订阅中的 Azure 应用环境。

我们的 Azure 环境包括:

应用服务环境

应用服务计划 I1

Azure 应用环境和存储容器在同一个虚拟网络上,但在不同的子网上。 Function 使用在存储帐户上具有所有者角色的托管身份。

下面列出的代码在我们不包含虚拟网络的旧环境中运行良好,但在我们的新环境中失败。

任何指导将不胜感激。

The Azure function which connects to Azure Storage works when run locally from Visual Studio 2019, but fails when run from Azure portal.

代码片段如下:

This section works just fine:

     string storageConnectionString = XXXXConn.ConnectionETLFileContainer();//Get Storage connection string

                var myDirectory = "XXXX/Uploads"; ///XXXX-etl-file-ingest/ABSS/Uploads/                     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();// Create a CloudBlobClient object for credentialed access to Azure Blob.                                      CloudBlobContainer blobContainer = blobClient.GetContainerReference("XXXX-etl-blobfile-ingest");// Get a reference to the Blob Container we created previously.                                      CloudBlobDirectory blobDirectory = blobContainer.GetDirectoryReference(myDirectory);// Get a reference to the Blob Directory.

                var blobs = blobDirectory.ListBlobs(useFlatBlobListing: true); //set useFlatBlobListing as true 

此语句失败:尝试遍历 Blob 文件并获取特定文件信息时发生故障。

foreach (var myblob in blob)

在 azure 门户打开存储帐户刀片下 go 到配置刀片,您将能够看到您的存储帐户允许访问的网络列表。一旦您拥有允许的网络列表,请检查 ZC1C425268E617A74D 上是否存在如果不是其中一个网络,那么您需要将托管 function 应用程序的网络添加到列表中。

更新 2:
我发现的最简单的解释/原因是,当应用服务或 Function 应用的设置WEBSITE_VNET_ROUTE_ALL设置为1时,到公共端点的所有流量都被阻止。 因此,如果您的存储帐户没有配置专用端点,对它的请求将失败。

文档:“要阻止到公共地址的流量,您必须将应用程序设置 WEBSITE_VNET_ROUTE_ALL 设置为 1。”
https://docs.microsoft.com/en-us/azure/app-service/web-sites-integrate-with-vnet.network-security-groups

更新1:
我在下面的回答只是解决我的问题的方法。 原来我没有将私有 DNS 区域(这是在您创建新的私有端点时为您创建的)链接到我的 VNET。

为此,go 到 Azure 门户中的私有 DNS 区域,然后单击左侧菜单栏中的Virtual network links 向您的 Function 集成的 VNET 添加一个新链接。

这可能与 OP 无关,但希望它能对其他人有所帮助。


原答案:
在我的情况下,这是通过在应用服务的子网(专用子网)上启用Microsoft.Storage服务端点来解决的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM