gpt4 book ai didi

Azure函数: Deploying to Staging Slot Restarts Production Slot

转载 作者:行者123 更新时间:2023-12-02 23:59:46 27 4
gpt4 key购买 nike

我们的消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽以减少部署期间的停机时间。

我们的部署流程是:

  • 将代码部署到暂存槽
  • 启动暂存槽
  • 将暂存槽与生产槽交换
  • 停止暂存槽

我们使用 Azure Pipelines 将代码 .NET Core 3.1 部署到暂存槽;这是此步骤的 YAML 定义:

- task: AzureFunctionApp@1
displayName: 'Deploy to Staging Slot'
inputs:
azureSubscription: '****'
appType: functionApp
appName: '****'
package: '$(System.ArtifactsDirectory)/Build.zip'
deployToSlotOrASE: true
slotName: 'staging'
resourceGroupName: '****'

我已禁用此步骤之后的所有步骤,并且仅运行此步骤。在 Azure Pipelines 中完成该步骤后,主应用程序(即生产槽)将重新启动,我开始收到 503 Service Unavailable 消息约 5 秒,然后是冷启动。

我不明白的是,在不交换的情况下将代码部署到暂存槽会如何导致生产槽重新启动。

我已确保自动交换已禁用,所以情况并非如此。

如何解释和解决这个问题?我们正在尝试完全删除 503 并实现零停机部署。

更新:我已经尝试将 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIG 添加到暂存和生产插槽中。没有什么区别。

最佳答案

我们遇到了同样的问题。即使我们的部署仅部署 ZIP(因此没有资源部署),我们也可以重现此问题。所有推荐的设置(例如 WEBSITE_ADD_SITENAME_BINDINGS_IN_APPHOST_CONFIGWEBSITE_RUN_FROM_PACKAGE)已成为应用配置的一部分,所有其他设置对于两个插槽都相同,并且没有粘性设置。

我们的情况有问题的设置是 WEBSITE_CONTENTSHARE 。这些设置与 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 一起,对于在事件驱动的扩展计划(例如消耗计划)中存储函数应用代码和配置是必需的。

根据文档,WEBSITE_CONTENTSHARE 需要是唯一的。可以将其从 ARM 模板中删除,在这种情况下,将自动生成一个值。检查两个插槽的 Azure 门户(或 Kudo)中的应用程序配置,以确保此设置具有唯一的值。

如果此设置的值不唯一,则会影响生产插槽的“缩放”,因为两个插槽现在共享相同的代码和配置。这似乎是当代码部署到暂存槽时生产槽重新启动的原因。

关于Azure函数: Deploying to Staging Slot Restarts Production Slot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66166423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com