使用部署槽部署 Azure Functions 时如何避免主机重启?
How to avoid hosting restart when deploying Azure Functions with deployment slot?
我将管道配置为对 Azure Functions 进行零停机时间部署。为此,我有以下步骤:
- 创建插槽
- 部署到插槽
- 开始交换预览
- 完成交换
我对这个过程的理解是,所有重启都应该只在预览时段发生(因此只有 JobHost 应该重启)并且这应该在最终交换之前占有一席之地。但是,我在 Application Insight 上注意到 Hosting stopped
当我点击函数时会导致 503
代码。有办法避免这种情况吗?我不确定这是否重要,但我使用高级计划。
您无法避免重启,但如果您的功能需要,您可以使用自定义 warm-up。
交换操作等待 warm-up 完成,然后再与目标交换交换。您在 web.config
文件中配置它,示例如下:
<system.webServer>
<applicationInitialization>
<add initializationPage="/" hostName="[app hostname]" />
<add initializationPage="/Home/About" hostName="[app hostname]" />
</applicationInitialization>
</system.webServer>
您还可以使用以下一项或两项应用设置自定义 warm-up 行为:
- WEBSITE_SWAP_WARMUP_PING_PATH:ping 预热站点的路径。通过指定以斜杠作为值开头的自定义路径来添加此应用程序设置。一个例子是 /statuscheck。默认值为 /.
- WEBSITE_SWAP_WARMUP_PING_STATUSES:warm-up 操作的有效 HTTP 响应代码。使用 comma-separated HTTP 代码列表添加此应用程序设置。一个例子是 200,202 。如果返回的状态代码不在列表中,则停止预热和交换操作。默认情况下,所有响应代码均有效。
我能够实现零停机部署设置变量 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG
到 1
。有关更多信息,您可以查看 here。一个缺点是部署期间处理请求的速度很慢。
我还建议关注 this github issue 关于 zer/miniam 停机部署的讨论。
我将管道配置为对 Azure Functions 进行零停机时间部署。为此,我有以下步骤:
- 创建插槽
- 部署到插槽
- 开始交换预览
- 完成交换
我对这个过程的理解是,所有重启都应该只在预览时段发生(因此只有 JobHost 应该重启)并且这应该在最终交换之前占有一席之地。但是,我在 Application Insight 上注意到 Hosting stopped
当我点击函数时会导致 503
代码。有办法避免这种情况吗?我不确定这是否重要,但我使用高级计划。
您无法避免重启,但如果您的功能需要,您可以使用自定义 warm-up。
交换操作等待 warm-up 完成,然后再与目标交换交换。您在 web.config
文件中配置它,示例如下:
<system.webServer>
<applicationInitialization>
<add initializationPage="/" hostName="[app hostname]" />
<add initializationPage="/Home/About" hostName="[app hostname]" />
</applicationInitialization>
</system.webServer>
您还可以使用以下一项或两项应用设置自定义 warm-up 行为:
- WEBSITE_SWAP_WARMUP_PING_PATH:ping 预热站点的路径。通过指定以斜杠作为值开头的自定义路径来添加此应用程序设置。一个例子是 /statuscheck。默认值为 /.
- WEBSITE_SWAP_WARMUP_PING_STATUSES:warm-up 操作的有效 HTTP 响应代码。使用 comma-separated HTTP 代码列表添加此应用程序设置。一个例子是 200,202 。如果返回的状态代码不在列表中,则停止预热和交换操作。默认情况下,所有响应代码均有效。
我能够实现零停机部署设置变量 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG
到 1
。有关更多信息,您可以查看 here。一个缺点是部署期间处理请求的速度很慢。
我还建议关注 this github issue 关于 zer/miniam 停机部署的讨论。