我们当前正在迁移到新的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)
答案 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
服务端点来解决的。