使用部署插槽部署Azure功能时,如何避免主机重启?

时间:2020-08-10 23:43:22

标签: azure-devops azure-functions azure-pipelines azure-functions-runtime azure-deployment-slots

我将管道配置为对Azure功能进行零停机时间部署。为此,我需要执行以下步骤:

  • 创建广告位
  • 部署到插槽
  • 开始与预览交换
  • 完全交换

我对这个过程的理解是,所有重新启动都应仅在预览插槽上进行(因此,仅JobHost应该重新启动),并且在最终交换之前应该有一个位置。但是,我在Application Insight上注意到Hosting stopped导致在我点击函数时生成503代码。有没有避免的方法?我不确定是否重要,但我使用的是高级计划。

2 个答案:

答案 0 :(得分:1)

您无法避免重新启动,但是如果您的功能需要,可以使用自定义warm-up

交换操作等待热身完成,然后再与目标交换进行交换。您可以在web.config文件中进行配置,例如以下示例:

<system.webServer>
    <applicationInitialization>
        <add initializationPage="/" hostName="[app hostname]" />
        <add initializationPage="/Home/About" hostName="[app hostname]" />
    </applicationInitialization>
</system.webServer>

您还可以使用以下一项或两项应用程序自定义预热行为:

  • WEBSITE_SWAP_WARMUP_PING_PATH:ping以预热站点的路径。通过指定以斜杠开头的自定义路径作为值来添加此应用设置。一个示例是/ statuscheck。默认值为/。
  • WEBSITE_SWAP_WARMUP_PING_STATUSES:用于预热操作的有效HTTP响应代码。使用逗号分隔的HTTP代码列表添加此应用设置。一个示例是200,202。如果返回的状态码不在列表中,则预热和交换操作将停止。默认情况下,所有响应代码均有效。

答案 1 :(得分:0)

我能够实现将零停机时间部署设置变量WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG设置为1。有关更多信息,请查看https://plotly.com/python/network-graphs/。令人毛骨悚然的是部署期间处理请求的速度很慢。

我还建议关注here,其中涉及有关zer /最小停机时间部署的讨论。