Microsoft AZ-204: Azure 应用服务与 Web 应用 — 学习指南
属于 Microsoft Azure Developer Associate AZ-204 — 学习指南. 使用经过验证的答案练习: Microsoft 考试中心, 或参加限时模拟考试: ExamRoll.io.
概述
Azure App Service 是一个完全托管的、基于 HTTP 的托管平台,用于托管 Web 应用、REST API 和后端服务,支持在 Windows 和 Linux 上运行代码和容器工作负载。它为缩放、部署工作流、身份验证、网络隔离、后台处理和安全配置提供了一流的功能。要精通此服务,需要理解 App Service 计划和缩放、部署槽和流量管理、CI/CD 集成路径、Easy Auth、自定义域和 TLS、WebJobs、App Service Environment (ASE) 以及使用 Key Vault 的安全配置模式。
计划、缩放和部署槽
App Service 计划定义了托管应用的计算资源。一个计划内的所有应用共享同一个虚拟机池和缩放配置。
定价层:
- 免费 (F1)/共享 (D1):仅用于开发和测试。无 SLA。无自定义 TLS。无部署槽。
- 基本 (B1–B3):专用虚拟机,手动横向扩展。无自动缩放。功能有限。
- 标准 (S1–S3):增加了自动缩放和部署槽。生产环境基线。
- 高级 v2/v3 (P1v2/P1v3+):更新的计算资源、更快的存储、增强的网络功能、区域冗余(在支持的 SKU 上)以及更高的缩放规模。最适合企业生产环境和高吞吐量场景。
- 隔离 (I1v2+) in ASE:专用于客户的虚拟网络,提供网络隔离和大规模扩展能力。
纵向扩展 vs 横向扩展:
- 纵向扩展(Scale up)将计划迁移到更高的 SKU,以获得更多 CPU、内存、更快的磁盘或高级功能(例如,Premium v3 以获得更好的性能和功能)。
- 横向扩展(Scale out)增加实例数量以水平分散负载。标准及以上层级支持基于指标(如 CPU、内存(Linux)、HTTP 队列长度、请求数、自定义指标)或计划的自动缩放规则。基本层级仅支持手动横向扩展。缩放操作会应用于计划内的所有应用。
部署槽和槽交换:
- 标准及以上层级支持多个槽(例如,过渡槽和生产槽)。槽在同一个计划上运行,每个槽都有自己的主机名和配置。
- 交换(Swap)操作将源槽的内容和运行时状态移动到目标槽,通过在流量切换前预热目标槽来实现近乎零停机时间。使用 applicationInitialization (Windows) 或健康检查来确保交换前的就绪状态。带预览的交换(Swap with preview)允许在最终完成前进行验证。
- 将配置条目标记为槽设置(slot settings),使其在交换期间“粘滞”在槽上(例如,数据库连接字符串、机密和诊断端点)。未标记的设置会在交换时随代码一起移动。
使用槽进行流量路由:
- 将一定百分比的实时流量路由到非生产槽以进行金丝雀测试(在生产环境中测试)。分配后,Cookie 会将用户固定到某个槽,以保持会话一致性。
部署和 CI/CD:GitHub、Azure DevOps 和容器注册表
部署中心(Deployment Center)集成了常见的 CI/CD 流程:
- GitHub Actions:
- App Service 可以使用 Oryx 构建或容器部署来搭建工作流。推送到分支时,Actions 会构建并部署到选定的槽。支持矩阵构建、环境和机密。对于 Linux 容器,工作流可以构建镜像并推送到 ACR 或 Docker Hub,然后触发 Web 应用部署。
- Azure DevOps:
- Pipelines(YAML 或经典模式)提供构建和发布阶段、审批、环境检查和多阶段门控。使用任务:Azure Web App、Azure Web App for Container 或 AzureCLI 进行基于 ARM/Bicep 的部署。变量组和由 Key Vault 支持的机密可集中管理配置。
- 容器注册表:
- App Service for Containers 从 ACR、Docker Hub 或私有注册表中拉取镜像。通过 ACR webhook 配置到应用的持续部署;新的镜像推送会触发拉取和重启。按标签(tag)或摘要(digest)固定版本。为确保生产安全,在提升到生产环境前,应使用镜像摘要和金丝雀槽。
- 其他部署机制:
- Kudu 支持基于 Git 的推送、Zip Deploy 和 Run From Package,以实现可复现的构建。.deployment 文件和自定义脚本可以在站点提供流量服务之前协调构建步骤。为达到企业级的发布规范,应将部署槽与 CI/CD 相结合,在交换前验证健康检查和进行预热。
安全、身份、域和 TLS
App Service 身份验证/授权(Easy Auth)将身份验证工作分流到平台,无需在代码中编写中间件。
- 提供程序:
- Microsoft Entra ID (Microsoft 身份平台)、Google、Facebook、GitHub 和 Twitter,以及任何与 OpenID Connect 兼容的提供程序,包括 Entra ID B2C。配置客户端 ID/机密、颁发者以及允许的令牌受众/范围。选择登录操作(允许匿名访问 vs. 要求身份验证)。
- 令牌存储和标头:
- 启用令牌存储以缓存登录流程中获取的访问/刷新令牌,可通过 /.auth/me 检索,并通过 /.auth/refresh 刷新。App Service 将用户声明注入请求头中(例如,Base64 编码的 X-MS-CLIENT-PRINCIPAL),以便应用无需 SDK 依赖即可派生身份。使用平台的注销端点来清除会话。
- 自定义域:
- 将 CNAME(推荐)或 A/ALIAS 记录映射到应用的默认主机名。如果需要,使用 TXT 记录验证域所有权。在 App Service 中绑定自定义主机名。
- SSL/TLS 证书:
- 强制仅使用 HTTPS 并设置最低 TLS 版本。通过 SNI(每个 IP 多个证书)或基于 IP 的 SSL(专用 IP)绑定证书。上传私有证书(PFX)以实现生产级的证书控制。App Service 托管证书为非通配符主机名提供免费、自动续订、经域验证的证书;它不能被导出,并且需要受支持的层级。使用 Key Vault 集成来大规模管理和自动轮换私有证书。
- 客户端证书 (mTLS):
- 可选择要求传入的客户端证书,并将其传递给应用进行验证。与 Web 应用程序防火墙和反向代理(例如 Application Gateway)结合使用,以实现端到端的 TLS。
后台处理与隔离环境
WebJobs 和 ASE 用于处理后台处理和网络隔离场景。
- WebJobs:
- 连续 WebJobs 在 Web 应用的每个实例上永久运行,适用于队列处理或事件循环。需要启用“始终开启”(Always On,标准层及以上)来保持其运行。其伸缩遵循应用服务计划的实例数量;如果只希望有一个活动的 worker,请在代码中实现单例行为。
- 触发式 WebJobs 按需运行或按计划(通过 settings.job 文件使用 CRON 表达式)运行。非常适合批处理作业、ETL 或定期维护任务。
- WebJobs SDK 为 Azure Storage Queues、Service Bus 队列/主题、Blobs 和计时器提供触发器和绑定,支持声明式函数方法和自动检查点。由队列触发的 WebJob 会对新消息立即做出反应,随应用实例伸缩,并使用毒信队列处理来实现故障隔离。日志和仪表板可在 Kudu 中访问。
- App Service Environment (ASE):
- ASEv3 使用 Isolated v2 SKU 在你的 VNet 内部托管 App Service 计划,提供专用计算资源、数据平面隔离和私有 IP。可选择外部 ASE 以支持公共入站流量,或选择内部负载均衡器 (ILB) ASE 以将所有入站流量保持在 VNet 内部私有。根据需要与私有 DNS、防火墙和 NVA/WAF 集成。
- ASE 允许精细的出站流量控制、网络检查和合规性对齐。它支持具有可预测网络边界的大规模托管,并且其计费与计划中的实例分开。
配置、连接字符串和 Key Vault 引用
应用配置在运行时注入,并且可以是槽位特定的。
- 应用设置:
- 以键值对的形式存在,并作为环境变量提供给应用程序。可标记为槽位设置,以便每个槽位保留不同的值。利用运行状况检查路径(Health check path)在部署期间将不健康的实例从轮换中移除。除非在框架中配置了动态重新加载模式,否则更改会触发应用重启。
- 连接字符串:
- 单独管理并作为环境变量呈现;.NET 应用还会收到特定于提供程序的配置。类型包括 SQLAzure、SQLServer、MySQL、PostgreSQL 和自定义 (Custom)。在适当的情况下标记为槽位设置,以避免交换机密。
- Key Vault 引用:
- 使用特殊语法
undefined
或无版本 URI 在应用设置和连接字符串中直接引用机密,以自动获取轮换后的新版本。为应用分配一个系统或用户分配的托管标识,然后在保管库上授予其“获取机密”的权限(通过 RBAC 或访问策略)。平台会解析和刷新这些值,而不会在 App Service 配置中暴露机密。要使用来自 Key Vault 的 TLS 证书,请将其作为证书导入,或使用平台支持的证书引用。
部署槽深入解析与卓越运营
使用暂存槽作为 CI/CD 的目标。部署后:
- 运行预热 ping 和健康检查,以预热 JIT、缓存和数据库连接。
- 使用槽设置验证配置差异,以隔离生产环境的机密和终结点。
- 执行“带预览的交换”,在最终确定前,使用生产主机名测试暂存槽。如果出现错误,取消交换以立即回滚。
- 对于渐进式交付,使用流量路由将一小部分流量定向到金丝雀槽,并监控 Application Insights 指标和日志。逐步增加流量,当 SLO 保持稳定时,完成交换。
实际问题场景
星巴克正在推出一个新的网络订购平台,该平台必须能够处理促销期间的流量激增、集成社交登录、保护内部 API,并可靠地处理后台订单工作流。
- 选择 Premium v3 App Service 计划,并配置两个部署槽(暂存、生产)
- 原因:Premium v3 提供更快的 CPU 和 SSD,可实现低延迟页面加载和更高吞吐量,此外还提供部署槽和自动缩放功能。部署槽可在促销流量高峰下实现零停机交换和快速回滚。
- 使用 GitHub Actions 实现 CI/CD,部署到暂存槽
- 原因:GitHub Actions 提供代码仓库原生的自动化功能。部署到暂存槽可以在影响任何客户流量之前进行预热和验证。该工作流使用 Oryx 在推送到 main 分支时进行构建和部署,确保构建的一致性。
- 启用 Easy Auth,集成 Microsoft Entra ID 和 Google 提供商;启用令牌存储
- 原因:Easy Auth 可分担 OAuth/OIDC 流程的负担,减少自定义安全代码的开发量。支持多个提供商,以满足消费者的登录偏好。令牌存储通过 /.auth 终结点公开缓存的令牌,使下游 API 调用(例如,调用忠诚度配置文件微服务)变得简单直接。
- 配置自定义域和 TLS
- 原因:通过 CNAME 绑定 order.starbucks.com,强制仅使用 HTTPS,并设置最低 TLS 1.2 版本以满足合规性要求。为暂存槽使用 App Service 托管证书以减少管理开销,并为生产环境上传来自公司 CA 的 PFX 文件,以满足品牌和证书策略的要求。
- 使用 WebJobs SDK 和 Azure 存储队列触发器来完成订单履行
- 原因:一个连续的 WebJob 在消息到达时进行处理,将结账与履行流程解耦,并平滑流量峰值。借助 Always On 功能和基于计划的横向扩展,吞吐量会随着实例的增加而自动提升。有害队列处理机制可以隔离无效消息,而不会中断整个处理管道。
- 使用 Key Vault 引用和系统分配的托管标识来保护出站机密
- 原因:机密永远不会存储在 App Service 配置中。该标识对 Key Vault 拥有最小权限访问,并且无版本号的机密 URI 可实现无缝的密钥轮换。
- 通过网络保护内部 API
- 原因:将内部微服务置于专用终结点之后;公共 Web 应用通过 VNet 集成(需要 Premium v3)调用它们,连接到安全的后端。如果未来需要更严格的隔离,可将 Web 层迁移到 ILB ASE 中,使所有入站流量都变为私有,同时保留 App Service 的各项功能。
- 采用金丝雀发布和交换的发布策略
- 原因:在促销期间,将 5% 的流量路由到暂存槽进行实时验证。通过 Application Insights 监控延迟、错误预算和结账转化率。如果指标健康,则执行“带预览的交换”;如果不健康,则取消交换并进行调查,以保障客户体验。
所有领域 · Azure Functions 与无服务器计算 →
练习这些题目 → · 在 ExamRoll.io 上限时练习 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
通过考试 →