在此案例中,組織會使用部署在虛擬網路內部的 Azure API 管理,在內部合併多個 API。
架構
下載此架構的 Visio 檔案。
上圖涵蓋外部使用者所取用之內部 API 的完整生命週期。
資料流程
資料流如下所示:
- 開發人員會將程式代碼簽入至連線至 Azure VM 上安裝的 CI/CD 管線代理程式 GitHub 存放庫。
- 代理程式會將組建推送至 ILB App Service 環境 上裝載的 API 應用程式。
- Azure API 管理 會透過 API 管理 原則中指定的 HOST 標頭來取用上述 API。
- API 管理 會針對所有 API 使用 App Service 環境 DNS 名稱。
- 應用程式閘道 會公開 API 管理 開發人員和 API 入口網站。
- Azure 私用 DNS 可用來在內部路由傳送 App Service 環境、API 管理 和 應用程式閘道 之間的流量。
- 外部使用者會利用公開的開發人員入口網站,透過 應用程式閘道 公用IP取用API。
元件
- Azure 虛擬網路可讓 Azure 資源安全地互相通訊,以及與網際網路和內部部署網路通訊。
- Azure 私用 DNS 允許在虛擬網路中解析功能變數名稱,而不需要新增自定義 DNS 解決方案。
- Azure API 管理 可協助組織將 API 發佈至外部、合作夥伴和內部開發人員,以使用其數據和服務。
- 應用程式閘道 是 Web 流量負載平衡器,可協助您管理 Web 應用程式的流量。
- 內部負載平衡器 App Service 環境 是一項 Azure App 服務 功能,可提供完全隔離且專用的環境,以安全地大規模執行App Service 應用程式。
- Azure DevOps 是管理開發生命週期的服務,包含規劃和專案管理、程序代碼管理、組建和發行的功能。
- Application Insights 是多個平台上的 Web 開發人員所適用的可延伸應用程式效能管理 (APM) 服務。
- Azure Cosmos DB Microsoft全域散發的多模型資料庫服務。
替代項目
- 在部署至 Azure 虛擬網路的 Azure 隨即轉移案例中,後端伺服器可以透過私人 IP 位址直接尋址。
- 如果使用內部部署資源,API 管理 實例可以透過 Azure VPN 閘道 和站對站因特網通訊協定安全性 (IPSec) VPN 連線或 ExpressRoute 私下連線回到內部服務,以建立混合式 Azure 和內部部署案例。
- 現有的或開放原始碼 DNS 提供者可以使用,而不是以 Azure 為基礎的 DNS 服務。
- 在 Azure 外部部署的內部 API 仍可透過 API 管理 服務公開 API 來受益。
案例詳細資料
在此案例中,組織會使用 Azure 應用程式 Service Environment (ILB App Service 環境) 裝載多個 API,而且想要使用部署在虛擬網路內之 Azure API 管理 (APIM) 在內部合併這些 API。 內部 API 管理 實例也可以公開給外部使用者,以允許使用 API 的完整潛力。 您可以使用 Azure 應用程式閘道 將要求轉送至內部 API 管理 服務來達成此外部暴露,進而取用部署在 App Service 環境 中的 API。
- Web API 會透過安全的 HTTPS 通訊協定裝載,且將使用 TLS 憑證。
- 應用程式閘道也會透過埠 443 設定,以進行安全且可靠的輸出呼叫。
- API 管理 服務設定為使用 TLS 憑證的自訂網域。
- 檢閱 App Service 環境 的建議網路設定
- 需要明確提及埠 3443,讓 API 管理 透過 Azure 入口網站 或 PowerShell 進行管理。
- 使用APIM內的原則,為裝載於 App Service 環境上的API新增HOST標頭。 這可確保 App Service 環境 負載平衡器會正確地轉送要求。
- API 管理 會針對裝載於 App Service 環境 下的所有應用程式,接受 App Service 環境 DNS 專案。 新增 APIM 原則以明確設定 HOST 標頭,以允許 App Service 環境 負載平衡器區分 App Service 環境 下的應用程式。
- 請考慮與 Azure 應用程式 Insights 整合,其也會透過 Azure 監視器呈現計量以進行監視。
- 如果您使用 CI/CD 管線來部署內部 API,請考慮 在虛擬網路內的 VM 上建置您自己的託管代理程式。
潛在使用案例
- 在客戶進行變更之後,在內部同步處理客戶地址資訊。
- 藉由公開獨特的資料資產,吸引開發人員到您的平臺。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
可靠性
可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱 可靠性支柱概觀。」
可用性
您可以將 Azure API 管理 服務部署為多重區域部署,以達到更高的可用性,並降低延遲。 此功能僅適用於進階模式。 此特定案例中的 API 管理 服務會取用來自 App Service 環境 的 API。 您也可以針對裝載於內部內部部署基礎結構的 API 使用 APIM。
App Service 環境 可以使用 流量管理員 配置檔來散發裝載於 App Service 環境 上的流量,以取得更高的規模和可用性。
復原
雖然此範例案例會進一步討論設定,但裝載於 App Service 環境 上的 API 應該具有足夠的彈性,以處理要求中的錯誤,這些要求最終由 API 管理 服務和 應用程式閘道 管理。 請考慮 API 設計中的重試和斷路器模式 。 如需設計復原解決方案的一般指引,請參閱 設計適用於 Azure 的復原應用程式。
安全性
安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀。
因為上述範例案例完全裝載在內部網路上,因此已將 API 管理 和 App Service 環境 部署在安全的基礎結構 (Azure 虛擬網絡) 上。 您可以將 應用程式閘道 與 適用於雲端的 Microsoft Defender 整合,以提供順暢的方式來防止、偵測及回應環境的威脅。 如需有關設計安全解決方案的一般指引,請參閱 Azure 安全性文件。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀。
API 管理 提供四個層級:開發人員、基本、標準和進階。 您可以在 Azure API 管理 定價指引中找到這些層級差異的詳細指引。
客戶可以新增和移除單位來調整 API 管理。 每個單位的容量依其層級而定。
注意
您可以使用開發人員分層來評估 API 管理功能。 您不應該將開發人員層用於生產環境。
若要檢視預估的成本並自定義您的部署需求,您可以修改 Azure 定價計算機中的縮放單位和 App Service 實例數目。
同樣地,您可以找到 App Service 環境 定價指引。
您可以根據所需的層級和資源來設定 應用程式閘道 定價。
效能效益
效能效率可讓您的工作負載進行調整,以有效率的方式符合使用者對其放置的需求。 如需詳細資訊,請參閱效能效率支柱概觀。
延展性
您可以根據數個因素來相應放大 API 管理 實例,例如並行連線的數目和速率、已設定的原則種類和數目、要求和回應大小,以及 API 上的後端延遲。 向外延展實例選項適用於基本、標準和進階層,但受限於基本層和標準層中的上限限制。 實例稱為「單位」,可相應增加至基本層中的兩個單位上限、標準層中的四個單位,以及進階層中任意數目的單位。 您也可以使用自動調整 選項,根據規則啟用相應放大。
App Service 環境 專為根據定價層的限制進行調整。 您可以根據應用程式的需求,將裝載於 App Service 環境 底下的應用程式設定為相應放大(實例數目)或相應增加(實例大小)。
Azure 應用程式閘道 自動調整可在所有全域 Azure 區域中作為區域備援 SKU 的一部分使用。 請參閱有關應用程式閘道自動調整的公開預覽功能。
部署此案例
必要條件與假設
- 您必須購買自定義功能變數名稱。
- 您需要 TLS 憑證(我們使用來自 Azure 憑證服務的通配符憑證),以針對所有自定義網域使用一個憑證。 您也可以為開發測試案例購買自我簽署憑證。
- 此特定部署會使用功能變數名稱 contoso.org 和網域的通配符 TLS 憑證。
- 部署會使用部署一節中所述的資源名稱和地址空間。 您可以設定資源名稱和地址空間。
部署和拼湊在一起
您需要進一步設定使用上述 Resource Manager 範本部署的元件,如下所示:
具有下列組態的虛擬網路:
- 名稱:
ase-internal-vnet
- 虛擬網路的位址空間:10.0.0.0/16
- 四個子網
backendSubnet
適用於 DNS 服務:10.0.0.0/24apimsubnet
適用於內部 API 管理 服務:10.0.1.0/28asesubnet
適用於 ILB App Service 環境:10.0.2.0/24- 測試 VM 和內部 DevOps 託管代理程式 VM 的 VMSubnet:10.0.3.0/24
- 名稱:
私用 DNS 服務 (公開預覽),因為新增 DNS 服務需要虛擬網路是空的。
App Service 環境 使用內部負載平衡器 (ILB) 選項:
aseinternal
(DNS:aseinternal.contoso.org
)。 部署完成後,上傳 ILB 的通配符憑證以 App Service 環境 為位置的 App Service 方案
API 應用程式 (App Service 為簡單起見) -
srasprest
(URL:https://srasprest.contoso.org
) - ASP.NET 模型檢視控制器 (MVC) 型 Web API。 部署之後,請設定:- 使用 TLS 憑證的 Web 應用程式
- Application Insights 至上述應用程式:
api-insights
- 針對裝載於虛擬網路內部的 Web API 建立 Azure Cosmos DB 服務:
noderestapidb
- 在建立的 Azure 私用 DNS 區域中建立 DNS 專案
- 您可以使用 Azure Pipelines 在 虛擬機器 上設定代理程式,以在內部網路上部署 Web 應用程式的程式代碼
- 若要在內部測試 API 應用程式,請在虛擬網路子網內建立測試 VM
建立 API 管理 服務:
apim-internal
設定服務以連線到子網上的內部虛擬網路:
apimsubnet
。 部署完成之後,請執行下列其他步驟:- 使用 TLS 設定 APIM 服務的自定義網域
- API 入口網站 (
api.contoso.org
) - 開發入口網站 (
portal.contoso.org
) - 在 [API] 區段中,使用為 Web 應用程式的主機標頭新增 App Service 環境 DNS 名稱來設定 App Service 環境 應用程式
- 使用先前建立的測試 VM 來測試 虛擬網絡 上的 API 管理 服務
- API 入口網站 (
注意
無法從 Azure 入口網站 測試 APIM API,因為
api.contoso.org
無法公開解析。*- 使用 TLS 設定 APIM 服務的自定義網域
設定應用程式閘道以存取 API 服務:
apim-gateway
在埠 80 上。 將 TLS 憑證新增至應用程式閘道,以及對應的健康情況探查和 HTTP 設定。 同時將規則和接聽程式設定為使用 TLS 憑證。
成功完成上述步驟之後,請在的 Web 註冊機構 CNAME 項目中設定 DNS 專案api.contoso.org
,並使用 portal.contoso.org
應用程式閘道 公用 DNS 名稱:ase-appgtwy.westus.cloudapp.azure.com
。 確認您能夠從公用連線到開發人員入口網站,而且您可以使用 Azure 入口網站 來測試APIM服務API。
注意
對 APIM 服務的內部和外部端點使用相同的 URL 不是很好的做法。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Srikant Sarwa |資深客戶工程師
其他投稿人:
- Shawn Kupfer |技術寫入器
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。