Vnet问题背后与Azure Blob存储的Azure功能连接

时间:2020-07-23 17:41:49

标签: azure azure-functions azure-storage azure-storage-blobs

我们当前正在迁移到新的Azure订阅,并且在执行Azure功能时遇到了问题,该功能在我们的旧Azure订阅中按预期工作。旧的订阅和新的订阅之间的人与人之间的区别是,我们已经建立了带有子网的虚拟网络,并将资源部署在了子网的后面。

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

我们的Azure环境包括:

应用服务环境

应用服务计划I1

Azure应用程序环境和存储容器位于同一虚拟网络上,但位于不同的子网中。该功能正在使用对存储帐户具有所有者角色的托管身份。

下面列出的代码在不包含虚拟网络的旧环境中可以正常工作,但是在新环境中无法使用。

任何指导将不胜感激。

从Visual Studio 2019在本地运行时,连接到Azure存储的Azure功能可以运行,但是从Azure门户运行时会失败。

下面的代码段

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)

2 个答案:

答案 0 :(得分:0)

在转到配置刀片的azure门户打开存储帐户刀片中,您将能够看到您的存储帐户允许访问的网络列表。一旦获得允许的网络列表,请检查该功能是否正常如果应用程序不在这些网络之一上,则需要将托管您的功能应用程序的网络添加到列表中。

答案 1 :(得分:0)

更新 2:
我发现的最简单的解释/原因是,当应用服务或函数应用将设置 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。

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

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


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