azure - 每个 Azure "App Service"实例是否在其自己的 VM 上运行?

标签 azure azure-web-app-service

(请注意,我专门使用新的“ Blade ”Azure 门户并使用新术语,因此请避免使用“Azure 网站”等词语,因为它们不适用于此处)。

在门户中,我创建了两个 Azure 应用服务“foo-product”和“foo-staging” - 两者都存在于同一订阅和资源组中,并共享相同的应用服务计划。这些应用服务代表了一个简单的 ASP.NET Web 应用程序的生产和暂存部署,该应用程序作为普通网站运行。

应用服务计划为“基本:1 小”。

我的理解是,当您将 Azure 应用服务与基本或更高的应用服务计划一起使用时,该计划代表一个 VM,我可以在其中托管任意数量的 IIS 网站 - 这些 IIS 网站表示在Azure 作为 Azure 应用服务。

鉴于此,人们会假设当我访问 Kudu 中虚拟机的文件系统 ( https://yourwebsite.scm.azurewebsites.net/DebugConsole ) 时,我将能够在某个公共(public)根目录下看到每个网站的文件。

但是,当我访问 foo-product 网站的 Kudu 控制台时,我看到它的文件位于 D:\home\site\wwwroot 中,文件位于 foo-staging 找不到。

如果我理解正确的话,这意味着 Azure 实际上为每个网站创建了一个全新的 VM,并且网站无法共享文件系统 - 并且我无法拥有更高级的 Azure 管理的 IIS 配置 - 我会必须创建我自己的 self 管理的 Windows Server VM。

我可以理解为每个网站使用单独的虚拟机背后的动机,这似乎很浪费 - Windows Server 需要每个虚拟机至少 1 GB 内存,但我的网站很大程度上只是静态文件(但我不能使用静态文件) 共享应用服务计划,因为我需要一些更高级的功能)。那么这对微软来说就不划算了。

如何让 Azure 托管环境中的多个 Azure 应用服务共享同一个 VM?还是我想错了?

为了避免 X/Y 问题:我将声明我主要关心的是文件的持久性。我正在部署的 Web 应用程序将上传的文件存储到 webroot 的子目录中,并且这些文件应该永久存在。那里有一些不明确的信息:有些人建议主动销毁和回收网站(及其所有文件),并且应该使用 Azure 存储 Blob。我想使用 Azure 文件共享,不幸的是,在使用 WNetAddConnection2 时出现 ACCESS_DENIED 错误,并且一些用户报告无法在 Azure 应用服务中使用 Azure 文件共享 - 尽管我找不到 Microsoft 对此的任何权威信息。

最佳答案

如果它们位于同一应用服务计划中,则它们在同一虚拟机中运行。尝试在 Kudu 控制台中输入每个主机名,您将看到相同的机器名称。

但请注意,它们各自运行在不同的沙箱中,这会阻止它们看到彼此的文件。像 d:\home 这样的文件夹是虚拟化的,实际上指向网络共享。所以你不能用它来得出机器是相同的结论。

关于azure - 每个 Azure "App Service"实例是否在其自己的 VM 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128098/

相关文章:

asp.net-core - 使用 ConfigurationBuilder 检索 Web 应用程序连接字符串

azure - 如何为azure web应用程序创建csr文件

sql - 如何查看 Azure SQL 数据库上的数据

azure - 为 Azure API 管理配置动态 header 值

Azure Keyvault 通过 ARM 添加功能 MSI

azure - Visual Studio 2015 远程 Azure 调试

python - 使用 REST API python 将页面 blob 上传到 azure

Azure Service Fabric 激活错误 7148

c# - 在 Azure 网站上的何处保存/提取文件?

azure - 交换槽中的名称在 azure 中显示阶段和生产的相同名称