將 Azure API 管理執行個體部署至多個 Azure 區域

Azure API 管理支援多區域部署,可讓 API 發行者將區域性 API 閘道新增至一或多個支援的 Azure 區域中的現有 API 管理執行個體。 多區域部署有助降低異地散發 API 取用者感知的要求延遲,且改善區域離線時的服務可用性。

新增區域時,您可設定:

重要

啟用在單一區域中儲存客戶資料的功能,目前僅適用於亞太地區的東南亞區域 (新加坡)。 至於其他所有區域,客戶資料會儲存在地區中。

可用性

重要

這項功能只適用於 API 管理的進階層。

如需 v2 層的功能可用性(預覽),請參閱 v2 層概觀

關於多區域部署

  • 只有 API 管理 實例的閘道元件會複寫到多個區域。 實例的管理平面和開發人員入口網站只會裝載於 主要 區域,也就是您最初部署服務的區域。

  • 如果您想要在虛擬網路中部署 API 管理 實例時設定次要位置,VNet 和子網區域應該與您設定的次要位置相符。 如果您要在主要區域中新增、移除或啟用可用性區域,或變更主要區域的子網,則 API 管理 實例的VIP位址將會變更。 如需詳細資訊,請參閱 Azure API 管理 服務的 IP 位址。 不過,如果您要新增次要區域,主要區域的VIP將不會變更,因為每個區域都有自己的私人VIP。

  • API 與原則定義等閘道設定會在您新增的主要與次要區域之間定期同步處理。 將更新傳播至區域閘道通常需要不到10秒的時間。 多區域部署可在多個區域中提供 API 閘道的可用性,並在一個區域離線時提供服務可用性。

  • 當 API 管理 收到流量管理員端點的公用 HTTP 要求時(適用於外部 VNet 和非網路模式的 API 管理),流量會根據最低的延遲路由傳送至區域閘道,這可降低分散地理位置 API 取用者所經歷的延遲。

  • 每個區域中的閘道(包括主要區域)都有遵循URL模式的區域 https://<service-name>-<region>-01.regional.azure-api.netDNS 名稱,例如 https://contoso-westus2-01.regional.azure-api.net

  • 若區域離線,則會自動在失敗區域周圍將 API 要求路由至下一個最接近的閘道。

  • 若主要區域離線,則 API 管理管理平面與開發人員入口網站會變得無法使用,但次要區域會繼續使用最新的閘道設定來提供 API 要求的服務。

必要條件

  • 如果您尚未建立 API 管理 服務實例,請參閱建立 API 管理 服務實例。 選取 進階版 服務層級。
  • 如果您的 API 管理 實例部署在虛擬網路中,請確定您在計劃新增的位置和相同訂用帳戶中設定虛擬網路、子網和公用IP位址。 請參閱 虛擬網路必要條件

將 API 管理 服務部署到其他區域

  1. 在 Azure 入口網站 中,流覽至您的 API 管理 服務,然後從左側功能表中選取 [位置]。
  2. 選取 頂端列中的 [+ 新增 ]。
  3. 從下拉式清單中選取新增的位置。
  4. 選取位置中的縮放 單位 數目。
  5. 選擇性地選取一或多個 可用性區域
  6. 如果 API 管理 實例部署在虛擬網路,請在位置中設定虛擬網路設定。 選取位置中可用的現有虛擬網路、子網和公用IP位址。
  7. 選取 [ 新增 ] 以確認。
  8. 重複此程式,直到您設定所有位置為止。
  9. 選取 頂端欄中的 [儲存 ] 以開始部署程式。

拿掉 API 管理 服務區域

  1. 在 Azure 入口網站 中,流覽至您的 API 管理 服務,然後從左側功能表中選取 [位置]。
  2. 針對您想要移除的位置,請使用 資料表右端的 [...] 按鈕選取操作功能表。 選取刪除
  3. 確認刪除,然後選取 [ 儲存 ] 以套用變更。

將 API 呼叫路由傳送至區域後端服務

根據預設,每個 API 都會將要求路由傳送至單一後端服務 URL。 即使您已在各種區域中設定 Azure API 管理 閘道,API 閘道仍會將要求轉送至相同的後端服務,而此服務只會部署在一個區域中。 在此情況下,效能提升只會來自要求特定區域中 Azure API 管理 內快取的回應;連絡全球後端仍可能會導致高延遲。

若要利用系統的地理分佈,您應該在與 Azure API 管理 實例相同的區域中部署後端服務。 然後,您可以使用原則和 @(context.Deployment.Region) 屬性,將流量路由傳送至後端的本機實例。

  1. 流覽至您的 Azure API 管理 實例,然後從左側功能表中選取 [API]。

  2. 選取您想要的 API。

  3. 從 [輸入處理] 中的箭號下拉式清單中選取 [程序代碼編輯器]。

    API code editor

  4. 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 呼叫導向至 流量管理員,並讓它自動解析路由。

  • 針對流量散發和故障轉移,建議您搭配地理路由方法使用 流量管理員 不建議搭配使用 流量管理員 搭配加權路由方法搭配 API 管理 後端。

  • 針對維護作業期間的流量控制,我們建議使用優先順序路由方法。

使用自定義路由 API 管理 區域閘道

API 管理 根據最低延遲將要求路由傳送至區域閘道。 雖然無法在 API 管理 中覆寫此設定,但您可以使用自己的 流量管理員 搭配自定義路由規則。

  1. 建立您自己的 Azure 流量管理員
  2. 如果您使用自定義網域,請將其與 流量管理員 搭配使用,而不是 API 管理 服務。
  3. 在 流量管理員 中設定 API 管理 區域端點。 區域端點遵循的 https://<service-name>-<region>-01.regional.azure-api.net網址模式,例如 https://contoso-westus2-01.regional.azure-api.net
  4. 在 流量管理員 中設定 API 管理 區域狀態端點。 區域狀態端點遵循 的 https://<service-name>-<region>-01.regional.azure-api.net/status-0123456789abcdef網址模式,例如 https://contoso-westus2-01.regional.azure-api.net/status-0123456789abcdef
  5. 指定 流量管理員的路由方法

停用路由至區域閘道

在某些情況下,您可能需要暫時停用路由至其中一個區域網關。 例如:

  • 新增區域之後,設定及測試區域後端服務時,將它保持停用
  • 在區域中的一般後端維護期間
  • 在規劃的災害復原演練期間,將流量重新導向至其他區域,以模擬無法使用的區域,或在區域失敗期間

若要停用路由至 API 管理 實體中的區域閘道,請將閘道的 disableGateway 屬性值更新為 true。 您可以使用建立或更新服務 REST API、Azure CLI 中的 az apim update 命令、set-azapimanagement Azure PowerShell Cmdlet 或其他 Azure 工具來設定值。

注意

當您使用 API 管理 的預設路由,而非自定義路由解決方案時,您只能停用路由至區域網關的路由。

若要使用 Azure CLI 停用區域閘道:

  1. 使用 az apim show 命令來顯示針對 API 管理 實例所設定的位置、閘道狀態和區域 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
    
  2. 使用 az apim update 命令來停用可用位置中的閘道,例如美國西部 2。

    az apim update --name contoso --resource-group apim-hello-world-resource \
    --set additionalLocations[location="West US 2"].disableGateway=true
    

    更新可能需要幾分鐘的時間。

  3. 確認導向至區域閘道 URL 的流量已重新導向至另一個區域。

若要還原路由至區域閘道,請將 的值 disableGateway 設定為 false

虛擬網路

本節提供在虛擬網路中插入 API 管理 實例時,多重區域部署的考慮。

重要

在內部 VNet 模式中設定時,每個區域閘道也必須在埠 1443 上聯機到針對 API 管理 實例所設定的 Azure SQL 資料庫,而此實例只位於主要區域中。 請確定您在次要區域中針對網路設定的任何路由或防火牆規則,都允許連線到此 Azure SQL 資料庫的 FQDN 或 IP 位址;此案例無法使用 Azure SQL 服務標籤。 若要在主要區域中尋找 Azure SQL 資料庫名稱,請移至入口網站中 API 管理 實例的 [網路>網路狀態] 頁面。

IP 位址

  • 公用虛擬IP位址會在使用虛擬網路新增的每個區域中建立。 對於外部模式或內部模式中的虛擬網路,需要此公用IP位址,才能管理埠3443上的流量。

    • 外部 VNet 模式 - 公用 IP 位址也需要將公用 HTTP 流量路由傳送至 API 閘道。

    • 內部 VNet 模式 - 也會在每個新增虛擬網路的區域建立私人 IP 位址。 使用這些位址,在網路內連線到主要和次要區域中 API 管理 端點。

路由

  • 外部 VNet 模式 - 將公用 HTTP 流量路由傳送至區域閘道會自動處理,就像非網路 API 管理 實例一樣。

  • 內部 VNet 模式 - 私人 HTTP 流量預設不會路由傳送或負載平衡至區域閘道。 用戶擁有路由,並負責攜帶自己的解決方案來管理跨多個區域的路由和私人負載平衡。 範例解決方案包括 Azure 應用程式閘道和 Azure 流量管理員。

下一步