對外部使用者發佈內部 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 Service 的功能,可提供完全隔離和專用的環境,以便安全地大規模執行 App Service 應用程式。
  • Azure DevOps 是用來管理開發生命週期的服務,並包含用於規劃和專案管理、程式碼管理、建置和發行的功能。
  • Application Insights 是多個平台上的 Web 開發人員所適用的可延伸應用程式效能管理 (APM) 服務。
  • Azure Cosmos DB 是 Microsoft 的全域分散式多模型資料庫服務。

替代方案

實例詳細資料

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

  • Web API 是透過安全的 HTTPS 通訊協定所裝載,且將會使用 TLS 憑證
  • 應用程式閘道也會透過連接埠 443 設定,以進行安全和可靠的輸出呼叫。
  • API 管理服務是設定為使用 TLS 憑證的自訂網域。
  • 檢閱 App Service 環境的建議網路設定
  • 您必須明確提及允許 API 管理的連接埠 3443 可透過 Azure 入口網站或 PowerShell 進行管理。
  • 利用 APIM 內的原則,為 ASE 上裝載的 API 新增 HOST 標頭。 這可確保 ASE 的負載平衡器會正確地轉寄要求。
  • API 管理可針對 App Service 環境中裝載的所有應用程式,接受 ASE 的 DNS 項目。 新增APIM原則以明確設定 HOST 標頭,以允許 ASE 負載平衡器區分App Service 環境下的應用程式。
  • 請考慮與 Azure Application 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
    • 4 個子網路
      • DNS 服務的 backendSubnet:10.0.0.0/24
      • 內部 API 管理服務的 apimsubnet:10.0.1.0/28
      • ILB ASE 的:asesubnet10.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 應用程式 (為了簡單起見,使用 App Services) - 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] 區段中,針對 Web 應用程式的 HOST 標頭使用 ASE 的 DNS 名稱新增原則來設定 ASE 應用程式
      • 使用先前建立的測試 VM,在虛擬網路上測試內部API 管理服務

    注意

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

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

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

注意

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

參與者

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

主體作者:

其他參與者:

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

後續步驟

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