將 Azure API 管理 自我裝載閘道部署至 Azure Container Apps
適用於:開發人員 |進階版
本文提供將 Azure API 管理 自我裝載閘道元件部署至 Azure Container Apps 的步驟。
將自我裝載閘道部署至容器應用程式,以存取裝載於相同 Azure Container Apps 環境中的 API。
必要條件
完成下列快速入門:建立 Azure API 管理執行個體。
對於 Azure CLI:
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
注意
本文中的 Azure CLI 命令範例需要
containerapp
Azure CLI 擴充功能。 如果您尚未使用az containerapp
命令,當您執行第一個az containerapp
命令時,會動態安裝擴充功能。 深入瞭解 Azure CLI 擴充功能。
在您的 API 管理 實例中布建閘道
在部署自我裝載閘道之前,請在 Azure API 管理 實例中布建閘道資源。 如需步驟,請參閱 布建自我裝載網關。 在本文中的範例中,網關的名稱為 my-gateway
。
從 API 管理 取得閘道部署設定
若要部署閘道,您需要閘道的 令牌 和 組態端點 值。 您可以在 Azure 入口網站 中找到它們:
- 登入 Azure 入口網站,然後瀏覽至您的 API 管理執行個體。
- 在左側功能表中的 [部署和基礎結構] 底下,選取 [網關]。
- 選取您布建的閘道資源,然後選取 [ 部署]。
- 複製令牌和組態端點值。
將自我裝載閘道部署至容器應用程式
您可以使用 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-gateway
的myResourceGroup
容器應用程式。 在此範例中,會使用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
標頭來判斷要求的原始通訊協定。
確認容器應用程式正在執行
登入 Azure 入口網站,然後流覽至您的容器應用程式。
在容器應用程式的 [概觀] 頁面上,檢查 [狀態] 是否為 [正在執行]。
將測試要求傳送至 上的
/status-012345678990abcdef
狀態端點。 例如,使用curl
類似下列的命令。curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef
成功的要求會傳
200 OK
回回應。
提示
使用 CLI,您也可以執行 az containerapp show 命令來檢查容器應用程式的狀態。
確認閘道狀況良好
登入 Azure 入口網站,然後瀏覽至您的 API 管理執行個體。
在左側功能表中的 [部署和基礎結構] 底下,選取 [網關]。
在 [概觀] 頁面上,檢查閘道的狀態。 如果閘道狀況良好,它會報告一般閘道活動訊號。
範例案例
下列範例示範如何使用自我裝載閘道來存取相同環境中容器應用程式中裝載的 API。 如下圖所示,您可以從因特網存取自我裝載閘道,而 API 只能在容器應用程式環境中存取。
- 在與自我裝載閘道相同的環境中部署裝載 API 的容器應用程式
- 將 API 新增至您的 API 管理 實例
- 透過自我裝載閘道呼叫 API
在與自我裝載閘道相同的環境中部署裝載 API 的容器應用程式
例如,將範例音樂專輯 API 部署到容器應用程式。 如需稍後使用自我裝載閘道存取 API,請在與自我裝載閘道相同的環境中部署 API。 如需此範例中所用資源的詳細步驟和資訊,請參閱 快速入門:從本機原始程式碼建置和部署至 Azure Container Apps。 縮寫步驟如下:
將 Python 原始碼下載到本機電腦。 如果您想要的話,請以您選擇的其他語言下載原始程式碼。
將原始程式碼解壓縮至本機資料夾,並變更為 containerapps-albumapi-python-main/src 資料夾。
執行下列 az containerapp up 命令,將 API 部署至與自我裝載閘道相同環境中的容器應用程式。
.
請注意命令結尾的 ,它會指定目前資料夾做為容器應用程式的來源。#!/bin/bash az containerapp up --name albums-api \ --resource-group myResourceGroup --location centralus \ --environment my-environment --source .
確認容器應用程式正在執行,並在命令輸出中傳回的 FQDN 外部存取。 根據預設,API 可在端點存取
/albums
。 範例:https://albums-api.happyvalley-abcd1234.centralus.azurecontainerapps.io/albums/albums
。
設定內部輸入的 API
現在更新裝載範例 API 的容器應用程式,以只在容器環境中啟用輸入。 此設定只會限制從您部署的自我裝載閘道存取 API。
- 登入 Azure 入口網站,並流覽至您的容器應用程式。
- 在左側功能表中,選取 [輸入]。
- 將 [輸入] 設定為 [已啟用]。
- 在 [ 輸入流量] 中,選取 [ 限制為容器應用程式環境]。
- 檢閱其餘設定,然後選取 [ 儲存]。
將 API 新增至您的 API 管理 實例
以下是將 API 新增至 API 管理 實例並設定 API 後端的範例步驟。 如需詳細資訊,請參閱將 API 新增至 Azure API 管理。
將 API 新增至您的 API 管理 實例
- 在入口網站中,流覽至您設定自我裝載閘道的 API 管理 實例。
- 在左側功能表中,選取 [API] > [+ 新增 API]。
- 選取 [HTTP],然後選取 [完整]。 輸入下列設定:
- 顯示名稱:輸入描述性名稱。 範例: 專輯 API。
- Web 服務 URL:輸入 裝載 API 之容器應用程式的內部 FQDN。 範例:
http://albums-api.internal.happyvalley-abcd1234.centralus.azurecontainerapps.io
。 - URL 配置:選取 [HTTP(S)]。
- API URL 後綴:輸入您選擇的後綴。 範例: albumapi。
- 閘道:選取您布建的自我裝載閘道。 範例: my-gateway。
- 根據您的案例設定其他 API 設定。 選取 建立。
新增 API 作業
- 在左側功能表中,選取 [API>專輯 API]。
- 選取 [+ 新增作業]。
- 輸入工作設定:
- 顯示名稱:輸入作業的描述性名稱。 範例: 取得專輯。
- URL:選取 [取得 ],然後針對端點輸入
/albums
。 - 選取 [儲存]。
透過自我裝載閘道呼叫 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,您可以查詢記錄以查看要求和回應。