基本 Web 應用程式

Azure App Service
Azure 金鑰保存庫
Azure 監視器
Azure SQL Database

此架構會顯示基本 Web 應用程式的基本元件。 您可以使用架構來建置 Web 應用程式,然後根據您的需求自定義應用程式。

架構

Diagram showing the reference architecture for a basic web application in Azure.

下載此架構的 Visio 檔案

元件

  • Azure App 服務 是完全受控的平臺,可用於建立和部署雲端應用程式。 它可讓您定義一組計算資源,讓 Web 應用程式執行、部署 Web 應用程式,以及設定部署位置。
  • 部署位置 可讓您暫存部署,然後將它與生產部署交換。 如此一來,您就可以避免直接部署到生產環境。 如需特定建議, 請參閱下面的發行工程和部署 一節。
  • IP 位址:App Service 應用程式具有公用IP位址和功能變數名稱。 網域名稱是 的 azurewebsites.net子域,例如 contoso.azurewebsites.net
  • Azure DNS 是 DNS 網域的裝載服務,使用 Microsoft Azure 基礎結構提供名稱解析。 在 Azure 中裝載網域,即可使用與其他 Azure 服務相同的認證、API、工具和計費來管理 DNS 記錄。 若要使用自定義功能變數名稱(例如 contoso.com),請建立 DNS 記錄,將自訂功能變數名稱對應至IP位址。 如需詳細資訊,請參閱在 Azure App 服務 中設定自定義功能變數名稱。
  • Azure SQL 資料庫 是雲端中的關係資料庫即服務。 SQL 資料庫 與 Microsoft SQL Server 資料庫引擎共用其程式代碼基底。 視應用程式需求而定,您也可以使用 適用於 MySQL 的 Azure 資料庫適用於 PostgreSQL 的 Azure 資料庫。 這些替代方案是以開放原始碼 MySQL Server 和 Postgres 資料庫引擎為基礎的完全受控資料庫服務。
  • Microsoft Entra ID 是雲端式身分識別和存取管理服務,可讓員工存取為組織開發的雲端應用程式。
  • Azure 監視器 是一種解決方案,可用來收集、分析及處理整個環境的記錄和計量。
  • Azure 金鑰保存庫 支援秘密管理、金鑰管理和憑證管理。 它可以儲存應用程式秘密,例如資料庫 連接字串。

建議

您的需求可能與程式代碼中所述和提供的架構不同。 程序代碼會使用生產設定進行部署。 使用建議來自定義您的部署,以符合您的需求。

App Service 方案

App Service 方案有不同的定價層。 每個定價層都支持數 個實例大小,這些大小 與核心和記憶體數目不同。 您可以在左側導覽上選取 [相應增加][App Service 方案],在部署后變更定價層。 以下是一些 App Service 建議:

  • 基本標準和 進階版 定價層上執行生產工作負載。 在這三層中,應用程式會在專用的虛擬機實例上執行,並已配置可相應放大的資源。
  • 如果您需要自動調整和 TLS/SSL,請使用標準和頂級層。
  • 建立不同的App Service 方案以進行測試和開發。 使用免費共用 (預覽) 層來測試和開發以符合成本效益。 但請勿將 免費共用 層用於生產工作負載。 共用資源無法相應放大。
  • 請務必刪除您未使用的方案,例如測試部署。 App Service 方案會依每秒計費。 即使應用程式已停止,您仍需支付 App Service 方案中的實例費用。 如需 App Service 方案和計費的詳細資訊,請參閱:

下列 ARM 範本會部署到標準定價層。

SQL Database

  • 使用 Azure SQL 資料庫 來降低管理額外負荷。 Azure SQL 資料庫 會建立邏輯建構,做為資料庫集合的中央管理點。 此邏輯建構可減少管理額外負荷。 群組中的每個資料庫都會使用特定的 服務層級來部署。 在每個群組內,資料庫無法共享資源。 伺服器沒有計算成本,但您需要為每個資料庫指定層。 因此,效能可能會因為專用資源而變得更好,但成本可能更高。
  • 執行容量規劃,然後選擇符合需求的層級和效能等級。 SQL 資料庫 支援基本、標準和 進階版 服務層級,且每個層級內各以資料庫交易單位 (DTU) 測量的多個效能層級。

區域

  • 在相同的區域中建立 App Service 方案和 SQL 資料庫,以將網路等待時間降至最低。 一般而言,請選擇最接近用戶的區域。
  • 資源群組也有區域。 它會指定儲存部署元數據的位置。 將資源群組及其資源放在相同的區域中,以改善部署期間的可用性。
  • 使用定價計算機來預估成本。
  • 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework 中的成本一節。

考量

這些考慮會實作 Azure 良好架構架構的要素。 這些支柱是一組指導原則,可改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

效能效益

Azure App 服務 的主要優點是能夠根據負載調整應用程式。 以下是規劃調整應用程式時請記住的一些考慮。

調整 App Service 應用程式

有兩種方式可調整 App Service 應用程式:

  • 相應增加 表示變更實例大小。 實例大小會決定每個 VM 實例上的記憶體、核心數目和記憶體。 您可以變更實例大小或計劃層,手動相應增加。
  • 相應放大 表示新增實例來處理增加的負載。 每個定價層都有實例數目上限。 您可以手動變更實例計數,或設定自動調整,讓 Azure 根據排程和/或效能計量自動新增或移除實例,來相應放大。 每個縮放作業都會快速發生,通常是在幾秒內。

若要啟用 自動調整,請建立可定義實例數目下限和最大數目的自動調整 配置檔 。 您可以設定以排程為基礎的設定檔來觸發調整事件。 例如,您可以為工作日和週末建立個別配置檔。 配置檔可以包含何時新增或移除實例的規則。 例如,如果 CPU 使用量超過 70% 5 分鐘,請新增兩個實例。

調整 Web 應用程式的 建議:

  • 盡可能限制相應增加和減少。 它可以觸發應用程式重新啟動。 相反地,相應放大。選取符合一般負載下效能需求的階層和大小,然後相應放大實例來處理流量變更。
  • 啟用自動調整。 如果您的應用程式具有可預測的一般工作負載,請建立配置檔來預先排程實例計數。 如果工作負載無法預測,請使用以規則為基礎的自動調整來回應負載發生時所做的變更。 您可以結合這兩種方法。
  • 使用 CPU 使用量來自動調整規則。 CPU 使用量通常是自動調整規則的良好計量。 不過,您應該負載測試應用程式、找出潛在的瓶頸,並將自動調整規則以該數據為基礎。
  • 設定較短的冷卻期間,以新增實例,以及移除實例的較長冷卻期間。 自動調整規則包括 冷卻 期間。 冷卻期間是開始新的縮放動作之前,在調整動作完成之後等待的間隔。 冷卻期間可讓系統在再次調整之前穩定下來。 例如,將 5 分鐘設定為新增實例,但 60 分鐘即可移除實例。 最好在負載過重的情況下快速新增實例,以處理額外的流量,然後逐漸相應減少。

調整 SQL 資料庫

如果您需要較高的服務層級或效能層級,以相應增加個別資料庫,而不需要應用程式停機,SQL 資料庫。

如需詳細資訊,請參閱在 Azure SQL Database 中調整單一資料庫資源

可靠性

在撰寫本文時,App Service 的服務等級協定 (SLA) 為 99.95%。 App Service SLA 同時適用於單一和多個實例。 基本、標準和 進階版 層 SQL 資料庫 SLA 為 99.99%。

備份

SQL 資料庫 提供時間點還原和異地還原,以還原數據遺失。 這些功能可在所有層級中使用,而且會自動啟用。 您不需要排程或管理備份。

卓越營運

為生產環境、開發和測試環境建立個別的資源群組。 分隔環境可讓您更輕鬆地管理部署、刪除測試部署,以及指派訪問許可權。

將資源指派給資源群組時,請考慮下列功能:

  • 生命週期。 一般而言,將具有相同生命周期的資源放入相同的資源群組中。
  • 存取。 您可以使用 Azure 角色型存取控制 (RBAC) 將存取原則套用至群組中的資源。
  • 計費。 您可以檢視資源群組的匯總成本。

如需詳細資訊,請參閱 Azure Resource Manager 概觀

應用程式組態

  • 將組態設定儲存為 應用程式設定。 在 Resource Manager 樣本或使用 PowerShell 中定義應用程式設定。 在運行時間,應用程式設定會以環境變數的形式提供給應用程式。
  • 請勿將密碼、存取金鑰或 連接字串 檢查到原始檔控制中。 相反地,將秘密當做參數傳遞至將這些值儲存為應用程式設定的部署腳本。
  • 當您交換部署位置時,應用程式設定預設會交換。 如果您需要不同的生產與預備設定,您可以建立堅持位置且不會交換的應用程式設定。

診斷和監控

DevOps

  • 使用 ARM 範本 來部署 Azure 資源及其相依性。 隨附的 ARM 範本會部署單一 Web 應用程式。 所有資源都會在相同的基本工作負載中隔離。 此隔離可讓您更輕鬆地將工作負載的特定資源與小組產生關聯。 然後,小組可以獨立管理這些資源的所有層面。 此隔離可讓 DevOps 小組執行持續整合和持續傳遞 (CI/CD)。
  • 使用不同的 ARM 範本,並將其與 Azure DevOps 服務整合。 此設定可讓您在幾分鐘內建立不同的環境。 例如,您只能在需要時復寫類似生產環境的案例或負載測試環境,並節省成本。
  • 布建 Web 應用程式的多個實例。 您不希望 Web 應用程式相依於單一實例,而且可能會建立單一失敗點。 多個實例可改善復原性和延展性。

如需詳細資訊,請參閱 Azure Well-Architected Framework 中的 DevOps 一節。

發行工程和部署

  • 使用 Azure Resource Manager 範本 來布建 Azure 資源。 範本可讓您更輕鬆地透過PowerShell或 Azure CLI 將部署自動化。
  • 部署應用程式 (程序代碼、二進位檔和內容檔案)。 您有數個選項,包括使用 Visual Studio 從本機 Git 存放庫部署,或從雲端型原始檔控制持續部署。 請參閱將您的應用程式部署至 Azure App 服務

App Service 應用程式一律有一個名為 的部署位置 production。 生產位置代表即時生產網站。 建議您建立部署更新的預備位置。 使用預備位置的優點包括:

  • 您可以將部署交換至生產環境之前,先確認部署是否成功。
  • 部署到預備位置可確保在交換至生產環境之前,所有實例都會熱身。 許多應用程式都有顯著的熱身和冷啟動時間。
  • 建立第三個位置來保存最後一個已知良好的部署。 交換預備和生產環境之後,請將先前的生產環境部署(目前處於預備中)移至最後一個已知良好的位置。 如此一來,如果您稍後發現問題,您可以快速還原為最後已知良好的版本。

Swapping slots for production and staging deployments

  • 如果您還原為舊版,請確定任何資料庫架構變更都回溯相容。
  • 請勿在生產部署上使用位置進行測試,因為相同 App Service 方案內的所有應用程式都會共用相同的 VM 實例。 例如,負載測試可能會降低即時生產網站。 相反地,請為生產和測試建立個別的 App Service 方案。 藉由將測試部署放入個別的計劃,您可以將部署與生產版本隔離。

安全性

本節列出本文所述 Azure 服務特有的安全性考慮。 這不是安全性最佳做法的完整清單。 如需其他安全性考慮,請參閱保護 Azure App 服務 中的應用程式。

SQL Database 稽核

稽核可協助您維護法規合規性,並深入瞭解可能表示商務考慮或可疑安全性違規的不一致和違規行為。 請參閱 開始使用 SQL 資料庫稽核

部署位置

每個部署位置都有公用IP位址。 使用 Microsoft Entra 登入 保護非生產位置,讓只有開發和 DevOps 小組的成員可以觸達這些端點。

記錄

記錄不應該記錄用戶的密碼或其他可能用來認可身分識別詐騙的資訊。 在儲存數據之前,請先從數據中清除這些詳細數據。

SSL

App Service 應用程式包含的子域 azurewebsites.net 上的 SSL 端點,不需額外費用。 SSL 端點包含網域的 *.azurewebsites.net 通配符憑證。 如果您使用自定義功能變數名稱,您必須提供符合自訂網域的憑證。 最簡單的方法是直接透過 Azure 入口網站 購買憑證。 您也可以從其他證書頒發機構單位匯入憑證。 如需詳細資訊,請參閱購買和設定 Azure App 服務的 SSL 憑證。

根據預設,ARM 範本部署中不會啟用 HTTPS。 作為安全性最佳做法,您的應用程式應該藉由重新導向 HTTP 要求來強制執行 HTTPS。 您可以在應用程式內實作 HTTPS,或使用 URL 重寫規則,如在 Azure App 服務 中為應用程式啟用 HTTPS 中所述

驗證

建議您透過身分識別提供者 (IDP) 進行驗證,例如 Microsoft Entra ID、Facebook、Google 或 Twitter。 使用 OAuth 2 或 OpenID 連線 (OIDC) 進行驗證流程。 Microsoft Entra ID 提供功能來管理使用者和群組、建立應用程式角色、整合內部部署身分識別,以及取用 Microsoft 365 和 商務用 Skype 等後端服務。

避免讓應用程式直接管理使用者登入和認證。 它會建立潛在的受攻擊面。 您至少需要有電子郵件確認、密碼復原和多重要素驗證、驗證密碼強度,以及安全地儲存密碼哈希。 大型身分識別提供者會為您處理所有這些專案,並不斷監視及改善其安全性做法。

請考慮使用 App Service 驗證 來實作 OAuth 或 OIDC 驗證流程。 App Service 驗證的優點包括:

  • 易於設定。
  • 簡單驗證案例不需要任何程序代碼。
  • 支援使用 OAuth 存取令牌來代表用戶取用資源的委派授權。
  • 提供內建令牌快取。

App Service 驗證的一些限制:

  • 有限的自定義選項。
  • 委派的授權僅限於每個登入會話的一個後端資源。
  • 如果您使用多個IDP,則沒有主領域探索的內建機制。
  • 針對多租使用者案例,應用程式必須實作邏輯來驗證令牌簽發者。

部署此案例

此架構包含 Azure App 服務 方案和空白應用程式。 它會使用 Azure SQL 資料庫、Azure 金鑰保存庫 來儲存資料庫 連接字串,以及用於記錄、監視和警示的 Azure 監視器。

使用下列命令來建立部署的資源群組。 選取 [ 試用] 按鈕以使用內嵌殼層。

az group create --name basic-web-app --location eastus

執行下列命令來部署 Web 應用程式和支援基礎結構。 出現提示時,請輸入使用者名稱和密碼。 這些值用於存取 Azure SQL 資料庫 實例。

az deployment group create --resource-group basic-web-app  \
    --template-uri https://raw.githubusercontent.com/mspnp/samples/master/solutions/basic-web-app/azuredeploy.json

如需詳細資訊和更多部署選項,請參閱用來部署此解決方案的 ARM 範本。

下一步

提示 來針對您的應用程式進行疑難解答:

產品檔案:

Microsoft Learn 課程模組: