Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
在支持部署时段的托管计划中,你的函数应用可以运行称为 时段的独立实例。 每个槽位是一个独立的环境,拥有自己的主机名称。 对某个时隙端点的访问取决于你为该时段设置的网络和访问限制。 其中一个槽位始终是生产槽位,你可以根据需要将某个可用的预发布槽位与生产槽位进行交换。
可用槽位数取决于特定的托管选项:
| 托管选项 | 槽位数(包括生产) |
|---|---|
| 消耗计划 | 2(一个生产槽位和一个暂存槽位) |
| 高级计划 | 3 |
| 专用(应用服务)计划 | 1-20 |
请在本文顶部选择您的主机套餐,查看适用于您功能应用的指导。
在消费、高级和专用套餐中,部署时段的行为如下:
- 在路由交换过程中,新的功能触发调用会被路由到交换的槽位,无需显式重启应用程序。
- 槽位交换并不能保证零停机时间。 当前正在执行的函数可能会被终止,并且在槽交换操作期间,已缩放应用的可用性可能会下降。 若要了解如何编写无状态和防御性函数,请参阅 改进 Azure 函数的性能和可靠性。
为何使用插槽?
使用部署槽位有很多优点,包括:
- 不同环境用于不同用途:通过使用不同的时段,你可以在切换到生产或预备时段前区分应用实例。
- 预热:将应用部署到槽位,而不是直接部署到生产环境,以便在正式上线前完成预热。 此外,使用slot还能降低HTTP触发工作负载的延迟。 实例会在部署前预热,从而降低新部署函数的启动延迟。
- 轻松回退:与生产环境进行交换后,原本放置过渡应用的槽现在包含以前的生产应用。 如果你换到生产槽的更改不符合预期,你可以立即撤销交换,拿回“最后已知正常实例”。
- 尽量减少重启次数:更改生产槽中的应用设置需要重启正在运行的应用。 可以改为在预备环境中更改设置,然后通过已预热实例将设置更改切换到生产环境。 建议使用插槽在 Functions 运行时版本之间进行迁移,以保持最高的可用性。 有关详细信息,请参阅最少停机时更新。
交换操作
在交换过程中,一个槽位是源头,另一个是靶位。 源插槽包含要应用到目标插槽的应用程序实例。 以下步骤有助于在交换期间减少目标槽的停机时间:
应用设置: 将目标槽的设置应用到所有源槽实例。 例如,将生产设置应用到临时实例上。 应用的设置包括以下类别:
等待重启和可用性: 交换操作会等待源槽中的每个实例完成其重启并可用于请求。 如果有任何实例无法重启,交换操作将会还原对源槽所做的所有更改,并停止操作。
更新路由: 如果源槽上的所有实例都成功预热,两个槽通过交换路由规则完成交换。 完成此步骤后,目标槽(例如生产槽)将获得先前已在源槽中预热的应用程序。
重复操作:现在源槽中已经包含之前位于目标槽中的预交换应用,通过应用所有设置并重启实例,完成源槽的相同操作。
请记住以下几点:
在执行交换操作期间的任何时候,已交换应用的初始化将在源槽上发生。 准备源槽时,无论交换是成功还是失败,目标槽都会保持联机。
要将暂存槽位与生产槽位切换,请确保生产槽位始终是目标槽位。 这样,交换操作才不会影响生产应用。
将与事件源和绑定相关的设置配置为部署槽位设置,然后再开始交换操作。 提前将它们标记为“粘性”可以确保事件和输出被定向到正确的实例。
当你创建新的暂存槽时,门户网站会在新槽中创建生产槽中的所有现有设置,而不考虑该设置的 粘性。
管理设置
有些配置是针对插槽特有的。 以下列表详细说明了更换槽位时哪些设置会改变,哪些设置保持不变。
槽位专用设置:
- 发布端点
- 自定义域名
- 非公共证书和 TLS/SSL 设置
- 缩放设置
- IP 限制
- Always On
- 诊断设置
- 跨域资源共享 (CORS)
- 专用终结点
非槽特定设置
- 通用设置,如框架版本、32/64位和网页套接字
- 应用设置(可以配置为与某个插槽绑定)
- 连接字符串(可以配置为关联到某个槽)
- 处理程序映射
- 公共证书
- 混合连接 *
- 虚拟网络集成 *
- 服务终结点 *
- Azure 内容分发网络 *
根据设计,用星号 (*) 标记的功能不会交换。
注意
某些适用于未交换设置的应用设置未被交换。 比如,因为诊断设置没有被交换,相关的应用设置(比如 WEBSITE_HTTPLOGGING_RETENTION_DAYS 和 DIAGNOSTICS_AZUREBLOBRETENTIONDAYS )也不会被替换,即使它们没有显示在插槽设置中。
创建部署设置
可将设置标记为部署设置,使设置保持不变。 粘性设置不会随应用实例变化。
如果你在一个槽位创建了部署设置,确保在涉及交换的其他槽位上创建相同的配置并保持唯一值。 这样,设置的值不会更改,同时设置名称可在不同的槽之间保持一致。 此名称一致性可确保代码不会尝试访问已在一个槽中定义,但未在另一个槽中定义的设置。
使用以下步骤创建部署设置:
在函数应用中,转到 部署槽,然后选择槽名称。
选择“配置”,然后选择要保留在当前插槽中的设置名称。
屏幕截图显示如何在 Azure 门户中配置槽的应用程序设置。 选择“部署槽设置”,然后选择“确定”。
设置部分关闭后,选择 保存 以保留更改。
将应用部署到槽位
创建槽时,槽是空的。 可以使用任何支持的部署技术将应用程序部署到槽中。
部署槽位如何缩放
所有槽位将缩放到与生产槽位相同的工作者数量。
- 对于 Consumption 计划,插槽会随着函数应用的扩展而变化。
- 对于应用服务计划,应用会扩展到固定数量的工作器。 插槽在与应用计划相同数量的工作线程上运行。
查看插槽
您可以通过Azure CLI或Azure门户查看现有时段的信息。
添加槽
你可以通过使用 Azure CLI 或 Azure 门户添加一个插槽。
你也可以使用 Azure 资源管理器(ARM)模板或 Bicep 文件创建部署槽位。 有关如何创建在消耗计划中包含部署槽的函数应用的示例,请参阅此 Azure 资源管理器 快速入门。
访问槽资源
访问过渡槽中的资源(HTTP 触发器和管理员终结点)的方式与访问生产槽相同。 但是,您需要在请求的 URL 中使用用于指定部署槽的主机名,而不是函数应用的主机名,同时还需要使用特定于该槽的密钥。 由于过渡槽是实时应用,因此必须在过渡槽中保护函数,就像在生产槽中一样。
交换槽
你可以使用 Azure CLI 或 Azure 门户,将插槽调入或调出生产环境。
回滚交换
如果交换出现错误,或者你想撤销交换,可以回滚到初始状态。 若要恢复到交换前的状态,请再次进行交换以恢复交换前的状态。
删除槽
你可以通过使用 Azure CLI 或 Azure 门户来移除一个插槽。
更改应用服务计划
对于运行在应用服务计划下的函数应用,你可以更改底层的应用服务计划以获得一个时段。
请按照以下步骤修改实例的应用服务计划:
在函数应用中,转到 部署槽,然后选择槽名称。
在“应用服务计划”下,选择“更改应用服务计划”。
选择要升级到的计划,或创建新的计划。
截图显示如何在 Azure 门户中更改应用服务计划的位置。 选择“确定”。
注意事项
Azure Functions部署槽位具有以下注意事项:
- 应用程序可用的插槽数量取决于计划。 消耗计划总共支持两个槽位:生产槽和一个暂存槽。 其他计划下运行的应用程序可以获得更多可用槽位。 有关详细信息,请参阅服务限制。
- 交换某个槽位会重置那些应用设置等于
AzureWebJobsSecretStorageType的应用的密钥。 - 当你启用老虎机时,门户会把你的功能应用设置为只读模式。
- 当你的函数应用使用 一个安全存储账户 作为默认存储账户(设置在
AzureWebJobsStorage中)时,插槽交换可能会失败。 有关详细信息,请查看WEBSITE_OVERRIDE_STICKY_DIAGNOSTICS_SETTINGS文档。 - 使用短于 32 个字符的函数应用名称。 超过32个字符的名称可能导致 主机ID碰撞。