Microsoft AZ-204: Azure App Service 和 Web Apps — 學習指南
屬於 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 方案定義了託管您應用程式的運算資源。方案中的所有應用程式共享相同的 VM 集區和擴展組態。
定價層:
- 免費 (F1)/共用 (D1):僅供開發和測試使用。無 SLA。無自訂 TLS。無部署位置。
- 基本 (B1–B3):專用 VM,手動向外擴展。無自動擴展。功能有限。
- 標準 (S1–S3):增加了自動擴展和部署位置。是生產環境的基準。
- Premium v2/v3 (P1v2/P1v3+):較新的運算資源、更快的儲存體、增強的網路功能、區域備援 (在支援的 SKU 上),以及更高的擴展性。最適合企業級生產環境和高輸送量。
- ASE 中的隔離 (I1v2+):專用於客戶的虛擬網路,具備網路隔離和大規模擴展能力。
向上擴展 vs 向外擴展:
- 向上擴展是將方案移至更高的 SKU,以獲得更多 CPU、記憶體、更快的磁碟或進階功能 (例如,Premium v3 提供更好的效能和功能)。
- 向外擴展是增加執行個體數量以水平分散負載。標準層級及以上支援根據 CPU、記憶體 (Linux)、HTTP 佇列長度、請求、自訂計量或排程等指標的規則進行自動擴展。基本層級僅支援手動向外擴展。擴展會套用到方案內的所有應用程式。
部署位置與位置交換:
- 標準及更高層級支援多個位置 (例如,預備 (staging) 和生產 (production))。這些位置在同一個方案上運行,每個位置都有自己的主機名稱和組態。
- 交換 (Swap) 會將來源位置的內容和執行階段狀態移動到目標位置,並在流量切換前先「暖機」目的地,以達到接近零停機時間。使用 applicationInitialization (Windows) 或健康狀態檢查來確保交換前的準備就緒。使用預覽交換 (Swap with preview) 可在最終確定前進行驗證。
- 將組態項目標記為位置設定,使其在交換期間保持黏附於該位置 (例如,資料庫連接字串、密鑰和診斷端點)。未標記的設定會隨著程式碼在交換時移動。
使用位置進行流量路由:
- 將一定比例的即時流量路由到非生產位置,以進行 Canary 測試 (在生產環境中測試)。Cookie 會在分配後將使用者釘選到某個位置,以保持工作階段一致性。
部署與 CI/CD:GitHub、Azure DevOps 和容器登錄檔
部署中心整合了常見的 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 設定對應用程式的持續部署;新的映像推送會觸發提取和重新啟動。可按標籤或摘要釘選。為了生產環境的安全性,建議在升級前使用映像摘要和 canary 位置。
- 其他部署機制:
- Kudu 支援基於 Git 的推送、Zip 部署和從套件執行 (Run From Package),以實現可重現的建置。
.deployment檔案和自訂腳本可以在網站提供流量服務前協調建置步驟。為了達到企業級的發行紀律,請將部署位置與 CI/CD 結合,在交換前驗證健康狀態檢查和暖機。
- Kudu 支援基於 Git 的推送、Zip 部署和從套件執行 (Run From Package),以實現可重現的建置。
安全性、身分識別、網域與 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 (Standard 層級以上) 以維持其運作。其擴展規模會跟隨 App Service Plan 的執行個體數量;如果只想要一個作用中的 worker,需在程式碼中實作 singleton (單例) 行為。
- 觸發式 WebJobs 會依需求或排程 (透過 settings.job 設定 CRON) 執行。非常適合批次作業、ETL 或定期維護。
- WebJobs SDK 為 Azure Storage Queues、Service Bus 佇列/主題、Blobs 和 Timers 提供觸發程序與繫結,並具備宣告式函式方法和自動檢查點功能。由佇列觸發的 WebJob 會立即對新訊息做出反應,隨應用程式執行個體擴展,並使用無效信佇列 (poison queue) 處理來進行錯誤隔離。日誌和儀表板可在 Kudu 中存取。
- App Service Environment (ASE):
- ASEv3 在您的 VNet 內託管 App Service Plan,使用 Isolated v2 SKU,提供專用運算資源、資料平面隔離和私有 IP。可選擇外部 ASE (External ASE) 以處理公用傳入流量,或選擇內部負載平衡器 ASE (ILB ASE) 以將所有傳入流量保持在 VNet 內部私有。可依需求與私有 DNS、防火牆和 NVA/WAF 整合。
- ASE 允許精細的輸出流量控制、網路檢查和法規遵循。它支援大規模託管,具有可預測的網路邊界,且其費用與方案內的執行個體分開計費。
組態、連接字串與 Key Vault 參考
應用程式組態會在執行階段注入,並且可以是部署位置專屬 (slot-specific) 的。
- 應用程式設定:
- 以鍵值對 (key-value pairs) 的形式存在,並作為環境變數提供給應用程式使用。可標記為部署位置設定 (slot settings),以在不同部署位置保留不同的值。利用健康狀態檢查路徑 (Health check path) 在部署期間將不健康的執行個體從輪替中移除。除非在您的框架中設定了動態重新載入模式,否則變更設定會觸發應用程式重新啟動。
- 連接字串:
- 獨立管理並以環境變數的形式呈現;.NET 應用程式還會收到特定提供者的組態。類型包括 SQLAzure、SQLServer、MySQL、PostgreSQL 和自訂 (Custom)。在適當情況下標記為部署位置設定,以避免交換祕密。
- Key Vault 參考:
- 使用特殊語法 @Microsoft.KeyVault(SecretUri=https://
<vault>.vault.azure.net/secrets/<name>/<version>) 或無版本 URI,直接在應用程式設定和連接字串中參考祕密,以便自動取得輪替後的版本。將系統或使用者指派的受控識別指派給應用程式,然後在該 Key Vault 上授予其取得祕密的權限 (透過 RBAC 或存取原則)。平台會解析並重新整理這些值,而不會在 App Service 組態中暴露祕密。若要使用來自 Key Vault 的 TLS 憑證,請將其匯入為憑證,或使用平台支援的憑證參考。
- 使用特殊語法 @Microsoft.KeyVault(SecretUri=https://
部署位置的深入探討與卓越營運
將預備位置作為 CI/CD 的目標。部署之後:
- 執行暖機 ping 與健康狀態檢查,以預先準備 JIT、快取與資料庫連線。
- 使用位置設定來驗證組態差異,以隔離生產環境的密碼與端點。
- 執行「交換並預覽」,在完成交換前,先用生產環境的主機名稱測試預備位置。若發生錯誤,可取消交換以立即回復。
- 為了實現漸進式交付,可使用流量路由將一小部分的流量導向 Canary 位置,並監控 App 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 提供者;啟用權杖存放區 (Token Store)
- 理由:Easy Auth 可卸載 OAuth/OIDC 流程,減少自訂安全程式碼的攻擊面。支援多個提供者以符合消費者的登入偏好。權杖存放區讓下游 API 呼叫(例如:會員資料微服務)變得簡單,可直接使用透過 /.auth 端點公開的快取權杖。
- 設定自訂網域與 TLS
- 理由:透過 CNAME 綁定 order.starbucks.com,強制僅使用 HTTPS,並設定最低 TLS 1.2 版本以符合規範。為預備位置使用 App Service 受控憑證以減少管理負擔,並為生產環境上傳來自企業 CA 的 PFX 憑證,以滿足品牌與憑證政策要求。
- 使用 Azure Storage Queue 觸發器的 WebJobs SDK 處理訂單履行
- 理由:一個連續執行的 WebJob 會在訊息抵達時立即處理,將結帳與訂單履行解耦,並平滑化流量尖峰。搭配「永遠開啟 (Always On)」與根據方案的向外擴展,輸送量會隨著執行個體增加而自動提升。無效佇列的處理機制可隔離有問題的訊息,而不會中斷整個處理管線。
- 使用 Key Vault 參考與系統指派的受控識別來保護對外連線的密碼
- 理由:密碼絕不存放在 App Service 設定中。該識別具備對 Key Vault 的最小權限存取,而無版本號的密碼 URI 則可實現無縫輪替。
- 透過網路保護內部 API
- 理由:將內部微服務置於私人端點之後;公開的 Web App 透過 VNet 整合(需要 Premium v3)呼叫它們,連線至受保護的後端。如果未來需要更嚴格的隔離,可將 Web 層遷移至 ILB ASE,將所有傳入流量設為私有,同時保留 App Service 的各項功能。
- 使用 Canary 部署與交換的發布策略
- 理由:在促銷活動期間,將 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.
通過考試 →