將 Azure API 管理執行個體部署至多個 Azure 區域
適用於:進階版
Azure API 管理支援多區域部署,可讓 API 發行者將區域性 API 閘道新增至一或多個支援的 Azure 區域中的現有 API 管理執行個體。 多區域部署有助降低異地散發 API 取用者感知的要求延遲,且改善區域離線時的服務可用性。
新增區域時,您可設定:
重要
啟用在單一區域中儲存客戶資料的功能,目前僅適用於亞太地區的東南亞區域 (新加坡)。 至於其他所有區域,客戶資料會儲存在地區中。
關於多區域部署
只會將 APIM 執行個體的閘道元件複寫至多個區域。 執行個體的管理平面與開發人員入口網站只會裝載於「主要」區域,也就是您最初部署服務的區域。
如果想要在虛擬網路中部署 (插入) APIM 執行個體時為該執行個體設定次要位置,VNet 和子網路區域應該與您設定的次要位置相符。 如果要在主要區域中新增、移除或啟用可用性區域,或是要變更主要區域的子網路,則 APIM 執行個體的 VIP 位址將會變更。 如需詳細資訊,請參閱 Azure APIM 服務的 IP 位址。 不過,如果要新增次要區域,則主要區域的 VIP 不會變更,因為每個區域都有自己的私人 VIP。
API 與原則定義等閘道設定會在您新增的主要與次要區域之間定期同步處理。 將更新傳播至區域閘道通常需要不到 10 秒的時間。 多區域部署可在多個區域中提供 API 閘道的可用性,並在一個區域離線時提供服務可用性。
當 APIM 收到對流量管理員端點的公用 HTTP 要求 (適用於 APIM 的外部 VNet 和非網路模式) 時,系統會根據最低的延遲,將流量路由傳送至區域閘道,對於分散在不同地理位置的 API 取用者,這可降低其所經歷的延遲。 在內部 VNet 模式中,客戶必須設定自己的解決方案,以跨區域閘道路由傳送流量及負載其平衡。 如需詳細資訊,請參閱網路考量。
每個區域 (包括主要區域) 中的閘道都有遵循
https://<service-name>-<region>-01.regional.azure-api.net
URL 模式的區域 DNS 名稱,例如https://contoso-westus2-01.regional.azure-api.net
。若區域離線,則會自動在失敗區域周圍將 API 要求路由至下一個最接近的閘道。
若主要區域離線,則 API 管理管理平面與開發人員入口網站會變得無法使用,但次要區域會繼續使用最新的閘道設定來提供 API 要求的服務。
必要條件
- 如果您尚未建立 API 管理服務執行個體,請參閱建立 API 管理服務執行個體。 請選取進階版服務層級。
- 如果您的 APIM 執行個體部署於虛擬網路中,請確定會在您規劃新增的位置中,以及在相同的訂用帳戶內,設定虛擬網路和子網路。 請參閱虛擬網路必要條件。
將 API 管理服務部署到其他區域
- 在 Azure 入口網站中,瀏覽至您的 API 管理服務,然後從左功能表中選取 [位置]。
- 選取頂端列中的 [+ 新增]。
- 從下拉式清單中選取新增的位置。
- 選取位置中的縮放 [單位]。
- 選擇性地選取一或多個可用性區域。
- 如果 API 管理執行個體部署在虛擬網路中,請在位置中設定虛擬網路設定,包括虛擬網路、子網路和公用 IP 位址 (如果啟用可用性區域)。
- 選取 [新增] 並確認。
- 重複此程序,直到設定所有位置為止。
- 在頂端列中選取 [儲存],開始部署程序。
移除API 管理服務區域
- 在 Azure 入口網站中,瀏覽至您的 API 管理服務,然後從左功能表中選取 [位置]。
- 針對您想要移除的位置,使用表格最右邊的 [...] 按鈕來選取操作功能表。 選取 [刪除]。
- 確認刪除,然後選取 [儲存] 來套用變更。
將 API 呼叫路由傳送至區域後端服務
根據預設,每個 API 會路由傳送要求至單一後端服務 URL。 即使您已在不同區域中設定 Azure API 閘道,API 閘道仍會將要求轉送到只部署在單一區域中的相同後端服務。 在此案例中,效能的提升只在於將回應快取到要求專屬區域中的 Azure API 管理內,但在連絡全球各地的後端時,可能仍會造成高延遲。
若要利用您系統的地理分佈,您應該將後端服務部署在 Azure API 管理執行個體所在的區域中。 然後,藉由使用原則和 @(context.Deployment.Region)
屬性,您可以將流量路由至您後端的本機執行個體。
瀏覽至您的 Azure API 管理執行個體,然後選取左側功能表中的 [API]。
選取想要的 API。
從 [輸入處理] 的箭號下拉式清單中,選取 [程式碼編輯器]。
使用
set-backend
結合條件式choose
原則,在檔案的<inbound> </inbound>
區段中建構適當的路由原則。例如,下列 XML 檔案會用於美國西部和東亞區域:
<policies> <inbound> <base /> <choose> <when condition="@("West US".Equals(context.Deployment.Region, StringComparison.OrdinalIgnoreCase))"> <set-backend-service base-url="http://contoso-backend-us.com/" /> </when> <when condition="@("East Asia".Equals(context.Deployment.Region, StringComparison.OrdinalIgnoreCase))"> <set-backend-service base-url="http://contoso-backend-asia.com/" /> </when> <otherwise> <set-backend-service base-url="http://contoso-backend-other.com/" /> </otherwise> </choose> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
使用流量管理員路由傳送至區域後端
您也可以使用 Azure 流量管理員面對後端服務,將 API 呼叫導向流量管理員,並讓服務自動解析路由。
針對流量分佈和容錯移轉,建議您搭配地理路由方法使用流量管理員。 不建議搭配 APIM 後端的加權路由方法使用流量管理員。
針對維護作業期間的流量控制,建議使用優先順序路由方法。
使用自訂路由傳送至 API 管理區域閘道
APIM 會根據最低延遲,將要求路由傳送至區域閘道。 雖然無法在 API 管理中覆寫此設定,但您可以搭配自訂路由規則使用自己的流量管理員。
- 建立您自己的 Azure 流量管理員。
- 如果您使用自訂網域,請搭配流量管理員使用,而不是 API 管理服務。
- 在流量管理員中設定 API 管理區域端點。 區域端點遵循
https://<service-name>-<region>-01.regional.azure-api.net
的 URL 模式,例如https://contoso-westus2-01.regional.azure-api.net
。 - 在流量管理員中設定 API 管理區域狀態端點。 區域狀態端點遵循
https://<service-name>-<region>-01.regional.azure-api.net/status-0123456789abcdef
的 URL 模式,例如https://contoso-westus2-01.regional.azure-api.net/status-0123456789abcdef
。 - 指定流量管理員的路由方法。
停用路由傳送至區域閘道
在某些情況下,您可能需要暫時停用路由傳送至其中一個區域閘道。 例如:
- 新增區域之後,當您設定並測試區域後端服務時,將它保持停用
- 在區域中的一般後端維護期間
- 在規劃的災害復原演練 (模擬無法使用的區域) 期間,或在區域失敗期間,將流量重新導向其他區域
若要停用路由傳送至 APIM 執行個體中的區域閘道,將閘道的 disableGateway
屬性值更新為 true
。 您可以使用建立或更新服務 REST API、Azure CLI 中的 az apim update 命令、set-azapimanagement Azure PowerShell Cmdlet 或其他 Azure 工具來設定值。
注意
只有當您使用 APIM 的預設路由,而非自訂路由解決方案時,才能停用路由傳送至區域閘道。
使用 Azure CLI 停用區域閘道:
使用 az apim show 命令,顯示針對 APIM 執行個體設定的位置、閘道狀態和區域 URL。
az apim show --name contoso --resource-group apim-hello-world-resource \ --query "additionalLocations[].{Location:location,Disabled:disableGateway,Url:gatewayRegionalUrl}" \ --output table
範例輸出︰
Location Disabled Url ---------- ---------- ------------------------------------------------------------ West US 2 True https://contoso-westus2-01.regional.azure-api.net West Europe True https://contoso-westeurope-01.regional.azure-api.net
使用 az apim update 命令,停用可用位置 (例如美國西部 2) 中的閘道。
az apim update --name contoso --resource-group apim-hello-world-resource \ --set additionalLocations[location="West US 2"].disableGateway=true
更新可能需要幾分鐘的時間。
確認已將導向區域閘道 URL 的流量重新導向另一個區域。
若要還原路由傳送至區域閘道,請將 disableGateway
的值設定為 false
。
虛擬網路
本節提供在虛擬網路中插入API 管理執行個體時,多區域部署的考量事項。
- 獨立設定每個區域網路。 已新增區域中虛擬網路的連線需求 (例如,必要的網路安全性群組規則),通常會與主要區域中網路的連線需求相同。
- 不同區域中的虛擬網路不需要對等互連。
重要
在內部 VNet 模式中設定時,每個區域閘道也必須在連接埠 1433 上輸出連線到針對 APIM 執行個體所設定的 Azure SQL 資料庫,而其只位於「主要」區域中。 確定在為次要區域的網路設定的所有路由或防火牆規則中,允許您連線到此 Azure SQL 資料庫的 FQDN 或 IP 位址;在此案例中無法使用 Azure SQL 服務標籤。 若要在主要區域中尋找 Azure SQL 資料庫名稱,移至入口網站中 APIM 執行個體的 [網路]>[網路狀態] 頁面。
IP 位址
系統會在每個隨著虛擬網路新增的區域中建立公用虛擬 IP 位址。 對於處於外部模式或內部模式的虛擬網路,此公用 IP 位址用於管理連接埠
3443
上的流量。外部 VNet 模式 -也需要 公用 IP 位址,才能將公用 HTTP 流量路由傳送至 API 閘道。
內部 VNet 模式 - 也會在每個隨著虛擬網路新增的區域中建立私人 IP 位址。 使用這些位址,從網路內連線到主要和次要區域中的 API 管理端點。
路由
外部 VNet 模式 - 系統會自動處理公用 HTTP 流量至區域性閘道的路由,其方式與非網路式 API 管理執行個體相同。
內部 VNet 模式 - 私人 HTTP 流量預設不會路由傳送或負載平衡處理到區域性閘道。 使用者擁有路由並負責自備解決方案,以管理跨多個區域的路由和私人負載平衡。