【问题标题】:Azure function connection to Azure Blob storage behind Vnet issueAzure 函数连接到 Vnet 问题背后的 Azure Blob 存储
【发布时间】:2020-11-13 12:37:05
【问题描述】:

我们目前正在迁移到新的 Azure 订阅,并且在执行在旧 Azure 订阅中按预期工作的 Azure Functions 时遇到问题。我们的旧订阅和新订阅的区别在于,我们建立了一个带有子网的虚拟网络,并在子网后面部署了我们的资源。

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

我们的 Azure 环境包括:

应用服务环境

应用服务计划 I1

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

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

任何指导将不胜感激。

连接到 Azure 存储的 Azure 功能在从 Visual Studio 2019 本地运行时有效,但从 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 in blob)

【问题讨论】:

    标签: azure azure-functions azure-storage azure-blob-storage


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      文档:“要阻止到公共地址的流量,您必须将应用程序设置 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。在那里添加一个新链接到您的 Function 所集成的 VNET。

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


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

      【讨论】:

        猜你喜欢
        • 2019-10-25
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 2021-07-11
        • 2017-09-17
        • 1970-01-01
        相关资源
        最近更新 更多