使用 ARM 更新现有 Web 应用程序部署的最佳做法是什么?

What is the best practice for updating an already existing web app deployment using ARM?

我公司开发了一个基于 Azure 资源管理器的解决方案,该解决方案部署了一组资源(本质上是一个存储、SQL 数据库和 Web 应用程序),并且它已经作为我们为新客户提供的流程实施。

但是,我们现在正在研究执行更新的最佳方式,我们正在考虑的假设之一是有一个特定的模板来更新此应用程序的二进制文件。

我们的想法是有一个单独的模板,它只有 Web 应用程序、一个应用程序主机和一个 MSDeploy 资源,它获取我们包的最新版本并将其重新上传到该 Web 应用程序。

我在这个解决方案中看到的唯一问题是能够处理更新版本的二进制文件所需的任何配置更改 - 我们不希望用户必须重新输入他们放置的任何参数原始部署(通过部署到 Azure 按钮完成),因此,任何配置都必须在应用程序内执行 - 计划是使用 Microsoft.WindowsAzure.Management.WebSites 库。

使用 Microsoft.WindowsAzure.Management.WebSites 的主要限制是您只能使用证书或服务主体进行身份验证。理想情况下,我们希望找到一种方法,使更新不需要任何身份验证,除了您在部署更新时提供的身份验证。

对于这种情况,是否有任何可遵循的最佳实践建议?

谢谢。

Link to the equivalent discussion on TechNet

只能通过 ARM 模板进行更新。 例如,即使在自己创建依赖资源时,连接字符串也可以自动添加到应用程序设置中。 前任。帐户存储连接字符串。

只有第一次创建您的网站会花费更多时间,大约 30 秒。

ARM 不会破坏您的 Web 应用程序(如果它们已经存在)。它只会更新。 如果没有变化,那么部署就非常快了。

如果您的更改需要新的 Appsettings 参数,您可以在 ARM 中输入它,然后签入您的存储库。 下一次部署将获取并更新 WebApp。

所以不需要任何人登录和更新。

我们最终决定放弃使用 ARM。 Service Principal 解决方案通过 SDK 允许我们使用 Web 作业或站点扩展来执行(自动或提示)更新,其中包括配置更改。但是,它需要 "too many" 权限 - 为什么客户会信任可以随意创建新资源或更新现有资源以增加其 Azure 账单的应用程序?

决定仅将 Powershell 用于更新 - 如果客户可以看到脚本并验证自己,则这不是问题。可悲的是,这增加了更新的复杂性,但我们发现这是一个必要的邪恶。