部署槽位和交换
为蓝绿部署创建过渡槽,在过渡槽中预热新版本,并在零停机的情况下将其交换到生产环境。
部署槽位和交换 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是部署 slot
部署 slot是 App Service Web 应用的实时独立环境,每个 slot 都有自己的主机名(例如 myapp-staging.azurewebsites.net)。slot 与 production slot 共享同一个 App Service 计划和资源,但彼此独立运行。它们支持蓝绿部署——您可以先在 staging slot 中验证新版本,然后将其交换到 production 中,实现零停机。Standard 层及更高层级支持 slot。
创建部署 slot
使用 Azure 门户或 CLI 向 Web 应用添加新的部署 slot。每个 slot 都有自己的 URL、应用程序设置和连接字符串。您可以在 Standard 层创建最多 5 个 slot,在 Premium 层最多创建 20 个 slot。常见的 slot 名称包括 staging、canary、hotfix 和 integration,分别对应发布管道的不同阶段。
# Create a staging deployment slot
az webapp deployment slot create \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging
# Deploy code to the staging slot
az webapp deploy \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--src-path app.zip
# The staging slot is live at:
# https://MyUniqueWebApp-staging.azurewebsites.net预热 staging slot
交换之前,必须预热 staging slot,以确保新版本已完全初始化。冷启动的 App Service 实例在运行时初始化期间处理最初几个请求的速度较慢,这在生产环境中是不可接受的。请启用 Auto Swap,或手动向 staging slot 发送预热 HTTP 请求。App Service 还支持 applicationInitialization 配置,用于定义预热路径;只有这些路径返回 200,slot 才会被视为已就绪。
# web.config snippet for warm-up (IIS/Windows)
# <system.webServer>
# <applicationInitialization>
# <add initializationPage='/health' hostName='MyUniqueWebApp-staging.azurewebsites.net'/>
# </applicationInitialization>
# </system.webServer>
# Or use a startup probe via the App Service health check
az webapp config set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--generic-configurations '{"healthCheckPath": "/health"}'交换 slot
交换会以原子方式互换 staging 和 production slot。在交换期间,App Service 首先将流量路由到运行新代码的 staging 实例,等待这些实例完成初始化,然后将所有生产流量重新路由到新实例,而原来的 production 实例则成为新的 staging slot。这样一来,回滚非常简单——再次交换即可恢复。
# Swap staging into production
az webapp deployment slot swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--target-slot production
# Rollback: swap production back to staging
az webapp deployment slot swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot production \
--target-slot stagingslot 固定设置与非固定设置
应用程序设置可以标记为固定(特定于 slot)或非固定(可交换)。非固定设置会在交换时随部署 slot 一起移动,因此 staging 数据库连接字符串会随代码进入 production。固定设置无论是否交换都会留在原 slot 中,因此 production 始终保留其 production 数据库连接字符串。请使用“deployment slot setting”复选框或 CLI 将设置标记为固定。
# Mark a setting as sticky (slot-specific) -- it won't swap
az webapp config appsettings set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--slot-settings DATABASE_URL='postgresql://staging-db/...'
# Set a non-sticky setting (it WILL travel with a swap)
az webapp config appsettings set \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--settings FEATURE_FLAG_NEW_UI=true用于金丝雀发布的流量拆分
App Service 支持流量拆分,即将一定比例的生产流量路由到非生产 slot,而无需执行完整交换。这支持金丝雀发布:随着您对新版本逐渐建立信心,可以将流量从 5% 逐步调整到 10%,再调整到 50%,并在每一步监视错误率。访问 canary slot 的用户会收到一个固定 Cookie,从而在整个会话中保持使用同一版本。
# Route 10% of traffic to the staging slot (canary)
az webapp traffic-routing set \
--name MyUniqueWebApp \
--resource-group MyRG \
--distribution staging=10
# View current traffic distribution
az webapp traffic-routing show \
--name MyUniqueWebApp \
--resource-group MyRG
# Reset all traffic to production
az webapp traffic-routing clear \
--name MyUniqueWebApp \
--resource-group MyRGAuto Swap
每当新代码部署到 staging slot 时,Auto Swap都会自动将该 slot 交换到 production。对于希望每次成功部署都立即上线的持续集成/持续交付管道来说,这非常理想。Auto Swap 会等待 staging slot 的 HTTP 请求返回 200,然后才完成交换。您可以在门户或 CLI 中按 slot 启用此功能,但请谨慎使用,因为从部署到 production 之间没有人工审批关卡。
# Enable Auto Swap for the staging slot
az webapp deployment slot auto-swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--auto-swap-slot production
# Disable Auto Swap
az webapp deployment slot auto-swap \
--name MyUniqueWebApp \
--resource-group MyRG \
--slot staging \
--disable部署 slot 最佳实践
请遵循以下部署 slot 最佳实践:交换到 production 之前,始终在 staging 中进行验证;使用固定设置,将 production 数据库连接与 staging 隔离;部署后,针对 staging slot URL 运行冒烟测试;配置运行状况检查路径,确保新版本运行状况不佳时 App Service 不会完成交换;并标记部署,以便跟踪每个 slot 中当前运行的是哪个提交。
持续集成/持续交付管道中的 slot
在典型的持续集成/持续交付管道中,构建阶段会编译并测试代码,部署阶段会将构件推送到 staging slot,集成测试阶段会针对 staging URL 运行自动化测试,而交换阶段会将 staging 交换到 production,也可以选择设置人工审批关卡。Azure Pipelines 和 GitHub Actions 都原生支持这种模式,并提供 App Service 部署操作。
# GitHub Actions step: deploy to staging slot
# - name: Deploy to Staging Slot
# uses: azure/webapps-deploy@v2
# with:
# app-name: MyUniqueWebApp
# slot-name: staging
# publish-profile: ${{ secrets.AZURE_STAGING_PUBLISH_PROFILE }}
#
# - name: Swap to Production
# uses: azure/CLI@v1
# with:
# inlineScript: |
# az webapp deployment slot swap \
# --name MyUniqueWebApp \
# --resource-group MyRG \
# --slot staging监视交换运行状况
在 slot 交换期间及交换之后,请在 Azure 监视器中监视关键指标,以确认新版本运行正常。请关注HTTP 5xx 错误、平均响应时间以及CPU/内存利用率是否出现峰值。设置指标警报,使其在错误率超过阈值时触发,这样您就能收到信号并快速交换回原版本。应用程序洞察的智能检测可以在部署后自动向您发出异常警报。
# Create an alert rule for HTTP 5xx errors post-swap
az monitor metrics alert create \
--name 'HighErrorRate' \
--resource-group MyRG \
--scopes '/subscriptions/.../providers/Microsoft.Web/sites/MyUniqueWebApp' \
--condition 'avg Http5xx > 10' \
--window-size 5m \
--evaluation-frequency 1m \
--action-group MyActionGroupslot 与多个应用的比较
与分别维护 staging 和 production 的完全独立 App Service 应用相比,部署 slot 更为合适,因为 slot 共享同一个计划(无需额外费用)、支持一键交换和回滚、支持流量拆分,并且在同一个 App Service 资源下管理。只有当 staging 需要完全不同的计划 SKU、隔离要求或完全独立的计费时,才应使用单独的应用。
快速检查
请测试您对本课 Microsoft Azure 基础知识(AZ-900)概念的理解。
课程回顾
本课介绍了以下内容:部署 slot提供隔离环境,从而支持蓝绿部署;slot 固定设置会将环境特定的配置(例如数据库 URL)绑定到 slot,而不是绑定到代码;流量拆分通过将一定比例的生产流量路由到新版本来支持金丝雀发布。接下来我们将学习自动缩放和自定义域。
常见问题解答
「部署槽位和交换」课时是免费的吗?
是的 — 「部署槽位和交换」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「部署槽位和交换」这节课中我会学到什么?
为蓝绿部署创建过渡槽,在过渡槽中预热新版本,并在零停机的情况下将其交换到生产环境。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「部署槽位和交换」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。