使用门户更改 Azure 应用程序设置而无需重新启动
Change an Azure App Setting using the portal without a restart
我有时会这样:
在 Azure 门户中,我转到 "App Services",然后单击我的 Web 应用程序,然后转到 "Application Settings"。
我在这里更改了 "App Settings" 列表中的一个值:
例如。我将“128”更改为“129”
最后我点击了"Save"。
这会导致我的网络应用程序重新启动。我不要那个。
问:有没有办法在不重启的情况下手动修改这个值?如果不是,我应该以另一种方式存储这个值吗?也许在 web.config 中使用我每次都可以上传的新部分?
如果我使用新的部分,例如:
<moreAppSettings configSource="moreSettings.config">
</moreAppSettings>
而这个moreSettings.config是这样的:
<?xml version="1.0" encoding="utf-8"?>
<moreSettings>
<add key="ClientAppBuild" value="129" />
</moreSettings>
我可以在不重新启动的情况下上传并覆盖单个 .config 文件吗?
如果您所追求的只是一个可以在运行时修改的键值存储,为什么不使用专门为此设计的东西,例如 Table Storage or Redis Cache?
如果您只是想存储您的内部版本号,只需在您的项目中部署一个静态 VERSION
文件(未通过源代码管理跟踪)并在构建时增加内部版本号。您需要将此文件保留在 wwwroot
之外(在 d:\home\site\somethingElse
之下),这样下一次部署就不会清理它。
如果您将源代码控制连接到 Kudu 以进行持续集成,您可以获得 current/active commit id(如果您不这样做,它也代表您最新构建的提交t roll back) 和其他一些有趣的事情通过调用 Kudu 的 /api/deployments
:
http is like curl but different
$ http https://SiteUsername:SitePassword@sitename.scm.azurewebsites.net/api/deployments
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
...
{
"active": true,
"author": "snobu",
"deployer": "GitHub",
"end_time": "2017-03-29T08:47:08.954981Z",
"id": "5ada48724129c78b8a993b4a25f2144aec03cbd2",
"message": "Changed bootstrap theme to Flatly",
...
更多信息 API 在这里 - https://github.com/projectkudu/kudu/wiki/REST-API#deployment
这比人为的内部版本号更有意义。您可以安全地将 site-level credentials 存储为应用程序设置并构建 /api/deployments
URL 而无需硬编码秘密。
通过 Azure 门户编辑应用程序设置与编辑 web.config 文件相同。因此,这将导致托管您的 Web 应用程序的 IIS 应用程序池重新启动。这在 Azure App Service 中的工作方式与在任何 Windows 服务器上的 IIS 中的工作方式完全相同。
如果您不想在更新特定设置时重新启动应用程序池,则需要将它们存储在其他地方。如果您要存储一个简单的 Key/Value 对,那么您可以将其存储在 JSON 或 XML 文件中,随应用一起部署,或者您可以使用 Key/Value 存储服务例如 Azure 存储表或 Redis 缓存。您也可以将 Key/Value 对存储在您的应用程序数据库中。无论将它存储在哪里,您都可能希望实现某种缓存,这样您就不必在每次访问时都从存储中读取值。
我能想到的另一个解决方案是有 2 个部署槽,说:
- 制作
- 前期制作
预生产是与生产配置相似的插槽,以实现零停机时间。
所以一步一步是:
- 将新配置添加到预生产中
- 等待预制作恢复
- 将 100% 的流量从生产路由到预生产
对生产重复步骤 1 和 2,然后将流量反向返回生产。
我有时会这样:
在 Azure 门户中,我转到 "App Services",然后单击我的 Web 应用程序,然后转到 "Application Settings"。
我在这里更改了 "App Settings" 列表中的一个值:
例如。我将“128”更改为“129”
最后我点击了"Save"。
这会导致我的网络应用程序重新启动。我不要那个。
问:有没有办法在不重启的情况下手动修改这个值?如果不是,我应该以另一种方式存储这个值吗?也许在 web.config 中使用我每次都可以上传的新部分?
如果我使用新的部分,例如:
<moreAppSettings configSource="moreSettings.config">
</moreAppSettings>
而这个moreSettings.config是这样的:
<?xml version="1.0" encoding="utf-8"?>
<moreSettings>
<add key="ClientAppBuild" value="129" />
</moreSettings>
我可以在不重新启动的情况下上传并覆盖单个 .config 文件吗?
如果您所追求的只是一个可以在运行时修改的键值存储,为什么不使用专门为此设计的东西,例如 Table Storage or Redis Cache?
如果您只是想存储您的内部版本号,只需在您的项目中部署一个静态 VERSION
文件(未通过源代码管理跟踪)并在构建时增加内部版本号。您需要将此文件保留在 wwwroot
之外(在 d:\home\site\somethingElse
之下),这样下一次部署就不会清理它。
如果您将源代码控制连接到 Kudu 以进行持续集成,您可以获得 current/active commit id(如果您不这样做,它也代表您最新构建的提交t roll back) 和其他一些有趣的事情通过调用 Kudu 的 /api/deployments
:
http is like curl but different
$ http https://SiteUsername:SitePassword@sitename.scm.azurewebsites.net/api/deployments
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
...
{
"active": true,
"author": "snobu",
"deployer": "GitHub",
"end_time": "2017-03-29T08:47:08.954981Z",
"id": "5ada48724129c78b8a993b4a25f2144aec03cbd2",
"message": "Changed bootstrap theme to Flatly",
...
更多信息 API 在这里 - https://github.com/projectkudu/kudu/wiki/REST-API#deployment
这比人为的内部版本号更有意义。您可以安全地将 site-level credentials 存储为应用程序设置并构建 /api/deployments
URL 而无需硬编码秘密。
通过 Azure 门户编辑应用程序设置与编辑 web.config 文件相同。因此,这将导致托管您的 Web 应用程序的 IIS 应用程序池重新启动。这在 Azure App Service 中的工作方式与在任何 Windows 服务器上的 IIS 中的工作方式完全相同。
如果您不想在更新特定设置时重新启动应用程序池,则需要将它们存储在其他地方。如果您要存储一个简单的 Key/Value 对,那么您可以将其存储在 JSON 或 XML 文件中,随应用一起部署,或者您可以使用 Key/Value 存储服务例如 Azure 存储表或 Redis 缓存。您也可以将 Key/Value 对存储在您的应用程序数据库中。无论将它存储在哪里,您都可能希望实现某种缓存,这样您就不必在每次访问时都从存储中读取值。
我能想到的另一个解决方案是有 2 个部署槽,说:
- 制作
- 前期制作
预生产是与生产配置相似的插槽,以实现零停机时间。
所以一步一步是:
- 将新配置添加到预生产中
- 等待预制作恢复
- 将 100% 的流量从生产路由到预生产
对生产重复步骤 1 和 2,然后将流量反向返回生产。