적용 대상: 개발자 | 프리미엄
이 문서에서는 Azure API Management의 자체 호스팅 게이트웨이 구성 요소를 Azure Container Apps에 배포하는 단계를 제공합니다.
컨테이너 앱에 자체 호스팅 게이트웨이를 배포하여 동일한 Azure Container Apps 환경에서 호스트되는 API에 액세스합니다.
필수 조건
다음 빠른 시작을 완료합니다. Azure API Management 인스턴스를 만듭니다.
Azure CLI의 경우:
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
비고
이 문서의 Azure CLI 명령 예제에는 Azure CLI 확장이
containerapp필요합니다. 명령을 사용하지az containerapp않은 경우 첫 번째az containerapp명령을 실행할 때 확장이 동적으로 설치됩니다. Azure CLI 확장에 대해 자세히 알아보세요.
Azure API Management 인스턴스에서 게이트웨이를 프로비전하세요.
자체 호스팅 게이트웨이를 배포하기 전에 Azure API Management 인스턴스에서 게이트웨이 리소스를 프로비전합니다. 단계는 자체 호스팅 게이트웨이 프로비저닝을 참조하세요. 이 문서의 예제에서는 게이트웨이의 이름을 지정 my-gateway합니다.
API Management에서 게이트웨이 배포 설정 가져오기
게이트웨이를 배포하려면 게이트웨이의 토큰 및 구성 엔드포인트 값이 필요합니다. Azure Portal에서 찾을 수 있습니다.
- Azure Portal에 로그인하고 Azure API Management 인스턴스로 이동합니다.
- 왼쪽 메뉴의 배포 + 인프라에서 자체 호스팅 게이트웨이를 선택합니다.
- 프로비전한 게이트웨이 리소스를 선택하고 설정배포> 선택합니다.
- 토큰 및 구성 엔드포인트 값을 복사합니다.
컨테이너 앱에 자체 호스팅 게이트웨이 배포
Azure Portal, Azure CLI 또는 기타 도구를 사용하여 자체 호스팅 게이트웨이 컨테이너 이미지를 컨테이너 앱에 배포할 수 있습니다. 이 문서에서는 Azure CLI를 사용하는 단계를 보여줍니다.
컨테이너 앱 환경 만들기
먼저 az containerapp env create 명령을 사용하여 컨테이너 앱 환경을 만듭니다.
#!/bin/bash
az containerapp env create --name my-environment --resource-group myResourceGroup \
--location centralus
이 명령은 다음을 만듭니다.
- 컨테이너 앱을 그룹화하기 위해 사용하는 컨테이너 앱 환경입니다
my-environment. - 로그 분석 작업 영역
자체 호스팅 게이트웨이용 컨테이너 앱 만들기
환경에서 컨테이너 앱에 자체 호스팅 게이트웨이를 배포하려면 az containerapp create 명령을 실행합니다.
먼저 Azure API Management 게이트웨이 리소스에서 토큰 및 구성 엔드포인트 값에 대한 변수를 설정합니다.
#!/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.9.2" \
--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.9.2. 자체 호스팅 게이트웨이에 대한 자세한 내용은 컨테이너 이미지를 참조하세요.컨테이너 앱에 대한 외부 접근이 포트 8080에서 지원됩니다.
컨테이너 앱의 복제본은 최소 1개 및 최대 3개입니다.
환경 변수에 구성 값을 전달하여 자체 호스팅 게이트웨이에서 Azure API Management 인스턴스로 연결합니다. 자세한 내용은 자체 호스팅 게이트웨이 컨테이너 구성 설정을 참조하세요.
비고
Azure Container Apps 인그레스는 HTTPS 요청을 자체 호스팅 게이트웨이 컨테이너 앱으로 전달할 때 HTTP로 변환하여 전달합니다. 여기서
net.server.http.forwarded.proto.enabled환경 변수는 요청의 원래 프로토콜을 결정하기 위해 자체 호스팅 게이트웨이가true헤더를 사용하도록X-Forwarded-Proto설정됩니다.
컨테이너 앱이 실행 중인지 확인
Azure Portal에 로그인하고 컨테이너 앱으로 이동합니다.
컨테이너 앱의 개요 페이지에서 상태가실행 중인지 확인합니다.
의 상태 엔드포인트에 테스트 요청을 보냅니다
/status-012345678990abcdef. 예를 들어 다음 명령과curl유사한 명령을 사용합니다.curl -i https://my-gateway.happyvalley-abcd1234.centralus.azurecontainerapps.io/status-012345678990abcdef성공적인 요청은 응답을 반환합니다
200 OK.
팁 (조언)
CLI를 사용하여 az containerapp show 명령을 실행하여 컨테이너 앱의 상태를 확인할 수도 있습니다.
게이트웨이가 정상인지 확인
Azure Portal에 로그인하고 Azure API Management 인스턴스로 이동합니다.
왼쪽 메뉴의 배포 + 인프라에서 자체 호스팅 게이트웨이를 선택합니다.
개요 페이지에서 게이트웨이의 상태를 확인합니다. 게이트웨이가 정상이면 일반 게이트웨이 하트비트를 보고합니다.
예제 시나리오
다음 예제에서는 자체 호스팅 게이트웨이를 사용하여 동일한 환경의 컨테이너 앱에서 호스트되는 API에 액세스하는 방법을 보여 줍니다. 다음 다이어그램에 표시된 것처럼 자체 호스팅 게이트웨이는 인터넷에서 액세스할 수 있지만 API는 컨테이너 앱 환경 내에서만 액세스할 수 있습니다.
- 자체 호스팅 게이트웨이와 동일한 환경에서 API를 호스팅하는 컨테이너 앱을 배포합니다.
- Azure API Management 인스턴스에 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 Portal에 로그인하고 컨테이너 앱으로 이동합니다.
- 왼쪽 메뉴에서 네트워킹>인그레스를 선택합니다.
- Ingress를 Enabled 상태로 설정합니다.
- 수신 트래픽에서 컨테이너 앱 환경으로 제한을 선택합니다.
- 나머지 설정을 검토하고 저장을 선택합니다.
Azure API Management 인스턴스에 API 추가
다음 단계에서는 Azure API Management 인스턴스에 API를 추가하고 API 백 엔드를 구성하는 방법을 보여 줍니다. 자세한 내용은 Azure API Management에 API 추가를 참조하세요.
API Management 인스턴스에 API 추가
- Azure Portal에서 자체 호스팅 게이트웨이를 구성한 API Management 인스턴스로 이동합니다.
- 왼쪽 메뉴에서 API API>>+ API 추가를 선택합니다.
-
HTTP를 선택하고 전체를 선택합니다. 다음 설정을 입력합니다.
- 표시 이름: 설명이 포함된 이름을 입력합니다. 예: 앨범 API.
-
웹 서비스 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 Portal의 컨테이너 앱 개요 페이지에서 FQDN을 찾거나 다음 az containerapp show 명령을 실행합니다.
#!/bin/bash
az containerapp show --name my-gateway --resource-group myResourceGroup \
--query "properties.configuration.ingress.fqdn" --output tsv
예를 들어 다음 curl 명령을 실행하여 엔드포인트에서 API를 호출합니다 /albumapi/albums . API에 구독 키가 필요한 경우 API Management 인스턴스에 대한 유효한 구독 키를 요청의 헤더로 전달합니다.
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"}]
팁 (조언)
Application Insights에 대한 API에 대한 로깅을 사용하도록 설정하는 경우 로그를 쿼리하여 요청 및 응답을 볼 수 있습니다.
제한점
자체 호스팅 게이트웨이 인스턴스는 하트비트 및 속도 제한 통신에 UDP 프로토콜을 사용합니다. Azure Container Apps는 현재 수신 및 내부 트래픽에 대해 UDP 프로토콜을 지원하지 않으므로, rate-limit 정책은 인스턴스 간에 카운터를 동기화할 수 없습니다. 따라서 X 제한으로 자체 호스팅 게이트웨이 컨테이너 앱의 복제본 3개를 유지 관리하면 제한 X에 도달할 때까지 트래픽의 3배가 될 수 있습니다.
Azure Container Apps는 사용 가능한 정상 복제본마다 요청을 선형으로 분산합니다. 속도 제한을 구현하기 위해 원하는 제한을 실행하려는 복제본 수로 나누고 구성에서 결과 값을 설정할 수 있습니다. 이 접근 방식은 컨테이너 앱이 확장될 때 조정된 카운터를 고려하지 못할 가능성이 있어, 자체적인 단점이 있습니다.