將內部 API 發佈至外部使用者

Azure API 管理
Azure 應用程式閘道
Azure DevOps
Azure 監視器
Azure 虛擬網路

在此案例中,組織會使用部署在 虛擬網絡 內的 Azure API 管理,在內部合併多個 API。

架構

顯示外部使用者所取用之內部 API 完整生命週期的架構圖表。

下載此架構的 Visio 檔案

上圖涵蓋外部使用者所取用之內部 API 的完整生命週期。

資料流程

資料流如下所示:

  1. 開發人員會將程式代碼簽入至連線至 Azure VM 上安裝的 CI/CD 管線代理程式 GitHub 存放庫。
  2. 代理程式會將組建推送至 ILB ASE 上裝載的 API 應用程式。
  3. Azure API 管理 會透過 API 管理 原則中指定的 HOST 標頭來取用上述 API。
  4. API 管理 會針對所有 API 使用 App Service 環境 的 DNS 名稱。
  5. 應用程式閘道 會公開 API 管理 的開發人員和 API 入口網站。
  6. Azure 私用 DNS 可用來在 ASE、API 管理 和 應用程式閘道 之間內部路由傳送流量。
  7. 外部使用者會利用公開的開發人員入口網站,透過 應用程式閘道的公用IP取用API。

元件

  • Azure 虛擬網絡 可讓 Azure 資源安全地彼此通訊、因特網和內部部署網路。
  • Azure 私用 DNS 允許在虛擬網路中解析功能變數名稱,而不需要新增自定義 DNS 解決方案。
  • Azure API 管理 可協助組織將 API 發佈至外部、合作夥伴和內部開發人員,以使用其數據和服務。
  • 應用程式閘道 是 Web 流量負載平衡器,可協助您管理 Web 應用程式的流量。
  • 內部 Load Balancer App Service 環境 是一項 Azure App 服務 功能,可提供完全隔離且專用的環境,以安全地大規模執行 App Service 應用程式。
  • Azure DevOps 是管理開發生命週期的服務,包含規劃和專案管理、程序代碼管理、組建和發行的功能。
  • Application Insights 是多個平台上的 Web 開發人員所適用的可延伸應用程式效能管理 (APM) 服務。
  • Azure Cosmos DB 是 Microsoft 全球散發的多模型資料庫服務。

替代項目

案例詳細資料

在此案例中,組織會使用 Azure 應用程式 服務環境 (ILB ASE) 裝載多個 API,而且想要使用部署在 虛擬網絡 內的 Azure API 管理 (APIM) 在內部合併這些 API。 內部 API 管理 實例也可以公開給外部使用者,以允許使用 API 的完整潛力。 您可以使用 Azure 應用程式閘道 將要求轉送至內部 API 管理 服務來達成此外部暴露,進而取用部署在 ASE 中的 API。

  • Web API 會透過安全的 HTTPS 通訊協定裝載,且將使用 TLS 憑證
  • 應用程式閘道 也會透過埠 443 設定,以進行安全且可靠的輸出呼叫。
  • API 管理 服務設定為使用 TLS 憑證的自訂網域。
  • 檢閱 App Service 環境 的建議網路組態
  • 需要明確提及埠 3443,讓 API 管理 透過 Azure 入口網站 或 PowerShell 進行管理。
  • 利用APIM內的原則,為ASE上裝載的API新增主機標頭。 這可確保 ASE 的負載平衡器會正確地轉送要求。
  • API 管理 會針對裝載於 App Service 環境 下的所有應用程式,接受 ASE 的 DNS 專案。 新增 APIM 原則以明確設定 HOST 標頭,以允許 ASE 負載平衡器區分 App Service 環境 下的應用程式。
  • 請考慮與 Azure 應用程式 Insights 整合,其也會透過 Azure 監視器呈現計量以進行監視。
  • 如果您使用 CI/CD 管線來部署內部 API,請考慮在 虛擬網絡 內的 VM 上建置您自己的託管代理程式。

潛在使用案例

  • 在客戶進行變更之後,在內部同步處理客戶地址資訊。
  • 藉由公開獨特的資料資產,吸引開發人員到您的平臺。

考量

這些考量能實作 Azure Well-Architected Framework 的要素,其為一組指導原則,可以用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework (部分機器翻譯)。

可靠性

可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱 可靠性支柱概觀。」

可用性

您可以將 Azure API 管理 服務部署為多重區域部署,以達到更高的可用性,並降低延遲。 此功能僅適用於 進階版模式。 此特定案例中的 API 管理 服務會取用來自 App Service 環境 的 API。 您也可以針對裝載於內部內部部署基礎結構的 API 使用 APIM。

App Service 環境 可以使用 流量管理員 配置檔來散發裝載於 App Service 環境 上的流量,以取得更高的規模和可用性。

復原

雖然此範例案例會進一步討論組態,但裝載於 App Service 環境 上的 API 應該具有足夠的彈性,以處理要求中的錯誤,這些要求最終由 API 管理 服務和 應用程式閘道 管理。 請考慮 API 設計中的重試和斷路器模式 。 如需設計復原解決方案的一般指引,請參閱 設計適用於 Azure 的復原應用程式。

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性要素的概觀

因為上述範例案例完全裝載在內部網路上,因此 API 管理 和 ASE 已部署在受保護的基礎結構 (Azure VNet)。 您可以將 應用程式閘道 與 適用於雲端的 Microsoft Defender 整合,以提供順暢的方式來防止、偵測及回應環境的威脅。 如需設計安全解決方案的一般指引,請參閱 Azure 安全性檔

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀

API 管理 提供四個層級:開發人員、基本、標準和進階。 您可以在 Azure API 管理 定價指引中找到這些層級差異的詳細指引。

客戶可以新增和移除單位來調整 API 管理。 每個單位的容量依其層級而定。

注意

您可以使用開發人員層來評估 API 管理 功能。 您不應該將開發人員層用於生產環境。

若要檢視預估的成本並自定義您的部署需求,您可以修改 Azure 定價計算機中的縮放單位和 App Service 實例數目。

同樣地,您可以找到 App Service 環境 定價指引

您可以根據所需的層級和資源來設定 應用程式閘道 定價

效能效益

效能效率可讓您的工作負載進行調整,以有效率的方式符合使用者對其放置的需求。 如需詳細資訊,請參閱效能效率要件概觀

延展性

您可以根據數個因素來相應放大 API 管理 實例,例如並行連線的數目和速率、設定的原則種類和數目、要求和回應大小,以及 API 上的後端延遲。 向外延展實例選項可在基本、標準和 進階版 層中使用,但受限於基本層和標準層中的上限限制。 這些實例稱為單位,而且可以在基本層中相應增加為兩個單位的最大值、標準層中的四個單位,以及 進階版 層中任意數目的單位。 您也可以使用自動調整 選項,根據規則啟用相應放大。

App Service 環境 是針對根據定價層的限制進行調整而設計。 您可以根據應用程式的需求,將裝載於 App Service 環境 底下的應用程式設定為相應放大(實例數目)或相應增加(實例大小)。

Azure 應用程式閘道 自動調整可作為所有全域 Azure 區域中區域備援 SKU 的一部分。 請參閱有關應用程式閘道自動調整的公開預覽功能

部署此案例

必要條件與假設

  1. 您必須購買自定義功能變數名稱。
  2. 您需要 TLS 憑證(我們使用來自 Azure 憑證服務的通配符憑證),以針對所有自定義網域使用一個憑證。 您也可以為開發測試案例購買自我簽署憑證。
  3. 此特定部署會使用功能變數名稱 contoso.org 和網域的通配符 TLS 憑證。
  4. 部署會使用部署一節中所述的資源名稱和地址空間。 您可以設定資源名稱和地址空間。

部署和拼湊在一起

部署至 Azure

您需要進一步設定使用上述 Resource Manager 範本部署的元件,如下所示:

  1. 具有下列組態的 VNet:

    • 名稱:ase-internal-vnet
    • VNet 的地址空間:10.0.0.0/16
    • 四個子網
      • backendSubnet 適用於 DNS 服務:10.0.0.0/24
      • apimsubnetfor Internal API 管理 Service:10.0.1.0/28
      • asesubnet 適用於 ILB ASE:10.0.2.0/24
      • 測試 VM 和內部 DevOps 託管代理程式 VM 的 VMSubnet:10.0.3.0/24
  2. 私用 DNS 服務 (公開預覽),因為新增 DNS 服務需要 VNet 是空的。

    • 如需詳細資訊,請參閱部署指導方針
  3. 使用內部負載平衡器 (ILB) 選項 App Service 環境: aseinternal (DNS: aseinternal.contoso.org)。 部署完成後,上傳 ILB 的通配符憑證

  4. 以 ASE 作為位置的 App Service 方案

  5. API 應用程式(為了簡單起見,應用程式服務) - srasprest (URL: https://srasprest.contoso.org) - ASP.NET 以 MVC 為基礎的 Web API。 部署之後,請設定:

    • 使用 TLS 憑證的 Web 應用程式
    • Application Insights 至上述應用程式:api-insights
    • 針對裝載於 VNet 內部的 Web API 建立 Azure Cosmos DB 服務: noderestapidb
    • 在建立的 私用 DNS 區域上建立 DNS 專案
    • 您可以使用 Azure Pipelines 在 虛擬機器 上設定代理程式,以在內部網路上部署 Web 應用程式的程式代碼
    • 若要在內部測試 API 應用程式,請在 VNet 子網內建立測試 VM
  6. 建立 API 管理 服務:apim-internal

  7. 設定服務以連線到子網上的內部 VNet: apimsubnet。 部署完成之後,請執行下列其他步驟:

    • 使用 TLS 設定 APIM 服務的自定義網域
      • API 入口網站 (api.contoso.org
      • 開發入口網站 (portal.contoso.org
      • 在 [API] 區段中,使用 ASE 的 DNS 名稱為 Web 應用程式的主機標頭新增原則來設定 ASE 應用程式
      • 使用先前建立的測試 VM 來測試 虛擬網絡 上的 API 管理 服務內部

    注意

    無法從 Azure 入口網站 測試 APIM API,因為api.contoso.org無法公開解析。*

  8. 設定 應用程式閘道 (WAF V1) 以存取 API 服務:埠 80 上的 apim-gateway。 將 TLS 憑證新增至 應用程式閘道 和對應的健康情況探查和 HTTP 設定。 同時將規則和接聽程式設定為使用 TLS 憑證。

成功完成上述步驟之後,請在的 Web 註冊機構 CNAME 項目中設定 DNS 專案api.contoso.org,並使用 portal.contoso.org 應用程式閘道 的公用 DNS 名稱:ase-appgtwy.westus.cloudapp.azure.com。 確認您能夠從公用連線到開發人員入口網站,而且您可以使用 Azure 入口網站 來測試APIM服務API。

注意

對APIM服務的內部和外部端點使用相同的URL不是很好的做法(不過在此示範中,這兩個URL都相同)。 如果您選擇有不同的內部和外部端點 URL,則可以使用支援 HTTP 重新導向的 WAF v2 應用程式閘道。

參與者

本文由 Microsoft 維護。 它最初是由下列參與者所撰寫。

主體作者:

其他投稿人:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步

使用 Azure API 管理 移轉 Web 應用程式