当前位置: 首页 > 知识库问答 >
问题:

Vnet问题后Azure功能连接到Azure Blob存储

郭鸿信
2023-03-14

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

我们还必须从旧订阅中的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(blob中的var myblob)

共有2个答案

吕奇
2023-03-14

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

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

更新1:。事实证明,我没有将私有DNS区域(这是在您创建新的私有endpoint时为您创建的)链接到我的VNET。

要做到这一点,请转到Azure门户中的私有DNS区域,并单击左侧菜单栏中的虚拟网络链接。在VNET中添加了一个新链接,您的功能集成在其中。

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

原始答案:
在我的例子中,通过启用Microsoft解决了这个问题。应用服务子网(专用子网)上的存储服务endpoint。

洪鹏海
2023-03-14

在转到配置边栏选项卡下的Azure门户打开存储帐户边栏选项卡中,您将能够看到存储帐户允许访问的网络列表。获得允许的网络列表后,请检查函数应用是否在其中一个网络上,如果不在,则需要将托管函数应用的网络添加到列表中。

 类似资料:
  • 我正在尝试从安装了Jupyter的笔记本电脑连接到Azure SQL Server实例。在这方面相当新,但有可能很容易解决的问题。 我已经通过PIP安装了64位Python3.7、Jupyter和AMD64 v17 pyodbc。然而,当我试图通过Jupyter连接时,我只是得到连接或驱动问题,不是很确定。 下面是我试图运行的代码,以连接并返回一个简单的前10行查询。 下面是我得到的错误消息: I

  • 我想要实现什么 通过Azure Function连接到位于防火墙后面的Azure BLOB存储帐户。 迄今为止采取的步骤 Azure Function针对按预期工作的公共存储帐户开发和测试。 在我的Azure Function的Azure资源管理器之后,我找到出站地址(条目),并将它们添加到存储帐户的防火墙中。 问题 在尝试对具有防火墙的存储帐户运行Azure功能时,我收到一个状态:500内部服务

  • 卡尔顿

  • 我试图连接到网站在使用filezilla赢得Azure。它连接正常几分钟,我能够上传文件。但是后来它停止了工作。我收到这个消息: 响应:257"/"是当前目录。命令:I型响应:200型设置为I型。命令:PASV响应:227进入被动模式(137,117,88,16,40,32)。命令:列表响应:150打开二进制模式数据连接。响应:550网络连接被本地系统中止。错误:检索目录列表失败 我尝试过将传输模

  • 我正在创建一个react应用程序。我有这样的代码 (我为axios和all设置了baseURL,因此URL是正确的) 我创建了一个firebase函数,如下所示(typescript) 现在,当我构建并运行firebase deploy——only函数,然后直接访问url时,一切正常。我明白我的问题。 但是在react应用程序中,我得到以下错误 从源http://localhost:3000访问X

  • 我有我的Java maven项目的TFS存储库。我想通过创建新的管道来访问Azure DevOps中的那个项目。在Azure DevOps中,我们有5个选项,其中之一是通过TFVC创建新的管道,它要求存储库URL(连接URL)。我提到了连接URL,但在Azure DevOps中仍然没有显示项目结构。 我还尝试添加一个新的服务连接(添加azure Repos/Team Foundation服务连接)