將 Azure API 管理 自我裝載閘道部署至 Azure Container Apps

適用於:開發人員 |進階版

本文提供將 Azure API 管理 自我裝載閘道元件部署Azure Container Apps 的步驟。

將自我裝載閘道部署至容器應用程式,以存取裝載於相同 Azure Container Apps 環境中的 API。

必要條件

在您的 API 管理 實例中布建閘道

在部署自我裝載閘道之前,請在 Azure API 管理 實例中布建閘道資源。 如需步驟,請參閱 布建自我裝載網關。 在本文中的範例中,網關的名稱為 my-gateway

從 API 管理 取得閘道部署設定

若要部署閘道,您需要閘道的 令牌組態端點 值。 您可以在 Azure 入口網站 中找到它們:

  1. 登入 Azure 入口網站,然後瀏覽至您的 API 管理執行個體。
  2. 在左側功能表中的 [部署和基礎結構] 底下,選取 [網關]。
  3. 選取您布建的閘道資源,然後選取 [ 部署]。
  4. 複製令牌組態端點值。

將自我裝載閘道部署至容器應用程式

您可以使用 Azure 入口網站、Azure CLI 或其他工具,將自我載入閘道容器映像部署到容器應用程式 本文說明使用 Azure CLI 的步驟。

建立容器應用程式環境

首先,使用 az containerapp env create 命令建立容器應用程式環境:

#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
    --location centralus

此指令會建立:

  • 名為 my-environment 的容器應用程式環境,用來將容器應用程式分組。
  • Log Analytics 工作區

建立自我裝載網關的容器應用程式

若要將自我裝載網關部署至環境中的容器應用程式,請執行 az containerapp create 命令。

第一次從 API 管理 閘道資源設定令牌和組態端點值的變數

#!/bin/bash
endpoint="<API Management configuration endpoint>"
token="<API Management gateway token>"

使用 命令建立 az containerapp create 容器應用程式:

#!/bin/bash
az containerapp create --name my-gateway \
    --resource-group myResourceGroup --environment 'my-environment' \
    --image "mcr.microsoft.com/azure-api-management/gateway:2.5.0" \
    --target-port 8080 --ingress external \
    --min-replicas 1 --max-replicas 3 \
    --env-vars "config.service.endpoint"="$endpoint" "config.service.auth"="$token" "net.server.http.forwarded.proto.enabled"="true"

此指令會建立:

  • 資源群組中名為 my-gatewaymyResourceGroup 容器應用程式。 在此範例中,會使用 mcr.microsoft.com/azure-api-management/gateway:2.5.0 映像建立容器應用程式。 深入瞭解自我裝載網關 容器映像

  • 支援埠 8080 上的容器應用程式外部輸入。

  • 容器應用程式的至少1個複本和最多3個複本。

  • 使用傳入環境變數中的組態值,從自我裝載網關聯機到 API 管理 實例。 如需詳細資訊,請參閱自我裝載網關 容器組態設定

    注意

    Azure Container Apps 輸入會將 HTTPS 要求轉送至自我裝載閘道容器應用程式作為 HTTP。 在這裡, net.server.http.forwarded.proto.enabled 環境變數會設定為 true ,讓自我裝載網關使用 X-Forwarded-Proto 標頭來判斷要求的原始通訊協定。

確認容器應用程式正在執行

  1. 登入 Azure 入口網站,然後流覽至您的容器應用程式。

  2. 在容器應用程式的 [概觀] 頁面上,檢查 [狀態] 是否[正在執行]。

  3. 將測試要求傳送至 上的 /status-012345678990abcdef狀態端點。 例如,使用 curl 類似下列的命令。

    curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
    

    成功的要求會傳 200 OK 回回應。

提示

使用 CLI,您也可以執行 az containerapp show 命令來檢查容器應用程式的狀態。

確認閘道狀況良好

  1. 登入 Azure 入口網站,然後瀏覽至您的 API 管理執行個體。

  2. 在左側功能表中的 [部署和基礎結構] 底下,選取 [網關]。

  3. 在 [概觀] 頁面上,檢查閘道的狀態。 如果閘道狀況良好,它會報告一般閘道活動訊號。

    入口網站中閘道狀態的螢幕快照。

範例案例

下列範例示範如何使用自我裝載閘道來存取相同環境中容器應用程式中裝載的 API。 如下圖所示,您可以從因特網存取自我裝載閘道,而 API 只能在容器應用程式環境中存取。

自我裝載網關的範例案例圖表。

  1. 在與自我裝載閘道相同的環境中部署裝載 API 的容器應用程式
  2. 將 API 新增至您的 API 管理 實例
  3. 透過自我裝載閘道呼叫 API

在與自我裝載閘道相同的環境中部署裝載 API 的容器應用程式

例如,將範例音樂專輯 API 部署到容器應用程式。 如需稍後使用自我裝載閘道存取 API,請在與自我裝載閘道相同的環境中部署 API。 如需此範例中所用資源的詳細步驟和資訊,請參閱 快速入門:從本機原始程式碼建置和部署至 Azure Container Apps。 縮寫步驟如下:

  1. 將 Python 原始碼下載到本機電腦。 如果您想要的話,請以您選擇的其他語言下載原始程式碼。

  2. 將原始程式碼解壓縮至本機資料夾,並變更為 containerapps-albumapi-python-main/src 資料夾。

  3. 執行下列 az containerapp up 命令,將 API 部署至與自我裝載閘道相同環境中的容器應用程式。 .請注意命令結尾的 ,它會指定目前資料夾做為容器應用程式的來源。

    #!/bin/bash
    az containerapp up --name albums-api \
        --resource-group myResourceGroup --location centralus \
        --environment my-environment --source .
    
  4. 確認容器應用程式正在執行,並在命令輸出中傳回的 FQDN 外部存取。 根據預設,API 可在端點存取 /albums 。 範例:https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums

設定內部輸入的 API

現在更新裝載範例 API 的容器應用程式,以只在容器環境中啟用輸入。 此設定只會限制從您部署的自我裝載閘道存取 API。

  1. 登入 Azure 入口網站,並流覽至您的容器應用程式。
  2. 在左側功能表中,選取 [輸入]。
  3. 將 [輸入] 設定[已啟用]。
  4. 在 [ 輸入流量] 中,選取 [ 限制為容器應用程式環境]。
  5. 檢閱其餘設定,然後選取 [ 儲存]。

將 API 新增至您的 API 管理 實例

以下是將 API 新增至 API 管理 實例並設定 API 後端的範例步驟。 如需詳細資訊,請參閱將 API 新增至 Azure API 管理

將 API 新增至您的 API 管理 實例

  1. 在入口網站中,流覽至您設定自我裝載閘道的 API 管理 實例。
  2. 在左側功能表中,選取 [API] > [+ 新增 API]
  3. 選取 [HTTP],然後選取 [完整]。 輸入下列設定:
    1. 顯示名稱:輸入描述性名稱。 範例: 專輯 API
    2. Web 服務 URL:輸入 裝載 API 之容器應用程式的內部 FQDN。 範例:http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io
    3. URL 配置:選取 [HTTP(S)]。
    4. API URL 後綴:輸入您選擇的後綴。 範例: albumapi
    5. 閘道:選取您布建的自我裝載閘道。 範例: my-gateway
  4. 根據您的案例設定其他 API 設定。 選取 建立

新增 API 作業

  1. 在左側功能表中,選取 [API>專輯 API]。
  2. 選取 [+ 新增作業]。
  3. 輸入工作設定:
    1. 顯示名稱:輸入作業的描述性名稱。 範例: 取得專輯
    2. URL:選取 [取得 ],然後針對端點輸入 /albums
    3. 選取 [儲存]。

透過自我裝載閘道呼叫 API

使用容器應用程式中執行的自我裝載網關 FQDN 呼叫 API。 在容器應用程式的 [概觀] 頁面上,於 Azure 入口網站 中尋找 FQDN,或執行下列az containerapp show命令。

#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
    --query "properties.configuration.ingress.fqdn" --output tsv

例如,執行下列 curl 命令以在端點呼叫 /albumapi/albums API。 如果您的 API 需要訂用帳戶金鑰,請在要求中將 API 管理 實例的有效訂用帳戶密鑰傳遞為標頭:

curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/albumapi/albums -H "Ocp-Apim-Subscription-Key: <subscription-key>"

測試成功時,後端會以成功的 HTTP 回應碼和某些資料進行回應。

HTTP/1.1 200 OK
content-length: 751
content-type: application/json
date: Wed, 28 Feb 2024 22:45:09 GMT
[...]

[{"id":1,"title":"You, Me and an App Id","artist":"Daprize","price":10.99,"image_url":"https://aka.ms/albums-daprlogo"},{"id":2,"title":"Seven Revision Army","artist":"The Blue-Green Stripes","price":13.99,"image_url":"https://aka.ms/albums-containerappslogo"},{"id":3,"title":"Scale It Up","artist":"KEDA Club","price":13.99,"image_url":"https://aka.ms/albums-kedalogo"},{"id":4,"title":"Lost in Translation","artist":"MegaDNS","price":12.99,"image_url":"https://aka.ms/albums-envoylogo"},{"id":5,"title":"Lock Down Your Love","artist":"V is for VNET","price":12.99,"image_url":"https://aka.ms/albums-vnetlogo"},{"id":6,"title":"Sweet Container O' Mine","artist":"Guns N Probeses","price":14.99,"image_url":"https://aka.ms/albums-containerappslogo"}]

提示

如果您已啟用 API 記錄至 Application Insights,您可以查詢記錄以查看要求和回應。