적용 대상: 모든 API Management 계층
API Management의 백 엔드(또는 API 백 엔드)는 프런트 엔드 API와 해당 작업을 구현하는 HTTP 서비스입니다.
특정 API를 가져올 경우 API Management는 자동으로 API 백 엔드를 구성합니다. 예를 들어 API Management는 다음을 가져올 때 백 엔드 웹 서비스를 구성합니다.
- OpenAPI 사양.
- SOAP API.
- Azure OpenAI API, HTTP 트리거 Azure 함수 앱 또는 논리 앱과 같은 Azure 리소스.
API Management는 다음과 같은 다른 Azure 리소스를 API 백 엔드로 사용하는 것도 지원합니다.
- Service Fabric 클러스터.
- 사용자 지정 서비스.
백 엔드 이점
API Management는 API의 백 엔드 서비스를 관리할 수 있도록 백 엔드 엔터티를 지원합니다. 백 엔드 엔터티는 백 엔드 서비스에 대한 정보를 캡슐화하고 API와 향상된 거버넌스에서 재사용을 승격합니다.
다음 중 하나 이상에 백 엔드를 사용합니다.
- 백 엔드 서비스에 대한 요청의 자격 증명 권한 부여
- 헤더나 쿼리 매개 변수 인증에 명명된 값이 구성된 경우 API Management 기능을 활용하여 Azure Key Vault에서 비밀을 유지합니다.
- 너무 많은 요청으로부터 백 엔드를 보호하기 위한 회로 차단기 규칙 정의
- 요청을 여러 백 엔드로 라우팅 또는 부하 분산
Azure Portal에서 또는 Azure API 또는 도구를 사용하여 백 엔드 엔터티를 구성 및 관리합니다.
백 엔드 만들기
Azure Portal에서 또는 Azure API 또는 도구를 사용하여 백 엔드를 만들 수 있습니다.
포털에서 백 엔드를 만들려면 다음을 수행합니다.
- 포털에 로그인하고 API Management 인스턴스로 이동합니다.
- 왼쪽 메뉴에서 API>백 엔드> 만들기를 선택합니다.
-
백 엔드 페이지에서 다음을 수행합니다.
- 백 엔드의 이름과 설명(선택 사항)을 입력 합니다.
- 예를 들어 함수 앱 또는 논리 앱, 사용자 지정 서비스의 사용자 지정 URL 또는 Service Fabric 클러스터와 같은 Azure 리소스에 대한 Azure 리소스와 같은 백 엔드 호스팅 유형을 선택합니다.
- 런타임 URL에서 API 요청이 전달되는 백 엔드 서비스의 URL을 입력합니다.
- 고급에서 필요에 따라 백 엔드에 대한 인증서 체인 또는 인증서 이름 유효성 검사를 사용하지 않도록 설정합니다.
- 백 엔드 풀에 이 백 엔드 서비스 추가에서 필요에 따라 백 엔드에 대한 부하 분산 풀을 선택하거나 만듭니다.
- 회로 차단기 규칙에서 필요에 따라 백 엔드에 대한 회로 차단기를 구성합니다.
- 권한 부여 자격 증명에서 필요에 따라 백 엔드에 대한 액세스 권한을 부여하도록 자격 증명을 구성합니다. 옵션에는 요청 헤더, 쿼리 매개 변수, 클라이언트 인증서 또는 API Management 인스턴스에 구성된 시스템 할당 또는 사용자 할당 관리 ID 가 포함됩니다.
- 선택하고생성합니다.
백 엔드를 만든 후 언제든지 백 엔드 설정을 업데이트할 수 있습니다. 예를 들어 회로 차단기 규칙을 추가하거나, 런타임 URL을 변경하거나, 권한 부여 자격 증명을 추가합니다.
권한 부여 자격 증명에 대한 관리 ID 구성
API Management 인스턴스에 구성된 시스템 할당 또는 사용자 할당 관리 ID 를 사용하여 백 엔드 서비스에 대한 액세스 권한을 부여할 수 있습니다. 권한 부여 자격 증명에 대한 관리 ID를 구성하려면 다음을 수행합니다.
백 엔드 구성의 권한 부여 자격 증명 섹션에서 관리 ID 탭을 선택하고 사용을 선택합니다.
클라이언트 ID에서 시스템 할당 ID 또는 인스턴스에 구성된 사용자 할당 ID를 선택합니다.
리소스 ID에 대상 Azure 서비스 또는 백 엔드를 나타내는 Microsoft Entra 애플리케이션의 애플리케이션 ID를 입력합니다. 예:
https://cognitiveservices.azure.com
Azure OpenAI 서비스의 경우자세한 예제는 인증 관리 ID 정책 참조를 참조하세요.
선택하고생성합니다.
참고 항목
또한 관리 ID에 적절한 권한 또는 RBAC 역할을 할당하여 백 엔드 서비스에 액세스합니다. 예를 들어 백 엔드가 Azure OpenAI 서비스인 경우 관리 ID에 역할을 할당할 Cognitive Services User
수 있습니다.
set-backend-service 정책을 사용하여 백 엔드 참조
백 엔드를 만든 후 API에서 백 엔드 식별자(이름)를 참조할 수 있습니다.
set-backend-service
정책을 사용하여 들어오는 API 요청을 백 엔드로 보냅니다. API에 대한 백 엔드 웹 서비스를 이미 구성한 경우 set-backend-service
정책을 사용하여 대신 백 엔드 엔터티로 요청을 리디렉션할 수 있습니다. 예시:
<policies>
<inbound>
<base />
<set-backend-service backend-id="myBackend" />
</inbound>
[...]
<policies/>
참고 항목
또는 base-url
를 사용할 수 있습니다. 일반적으로 형식은 .입니다 https://backend.com/api
. 잘못된 구성을 방지하려면 끝에 슬래시를 추가하지 마십시오. 일반적으로 백 엔드의 base-url
HTTP(S) 엔드포인트 값이 일치하여 프런트 엔드와 백 엔드 간에 원활한 통합을 사용하도록 설정해야 합니다. API Management 인스턴스는 백 엔드 서비스 이름을 에 추가합니다 base-url
.
set-backend-service
정책과 함께 조건부 논리를 사용하여 위치, 호출된 게이트웨이 또는 기타 식에 따라 유효 백 엔드를 변경할 수 있습니다.
예를 들어 호출된 게이트웨이를 기준으로 트래픽을 다른 백 엔드로 라우팅하는 정책은 다음과 같습니다.
<policies>
<inbound>
<base />
<choose>
<when condition="@(context.Deployment.Gateway.Id == "factory-gateway")">
<set-backend-service backend-id="backend-on-prem" />
</when>
<when condition="@(context.Deployment.Gateway.IsManaged == false)">
<set-backend-service backend-id="self-hosted-backend" />
</when>
<otherwise />
</choose>
</inbound>
[...]
<policies/>
회로 차단기
API Management는 백 엔드 리소스에 회로 차단기 속성을 노출하여 백 엔드 서비스가 너무 많은 요청에 의해 과부하되지 않도록 보호합니다.
- 회로 차단기 속성은 정의된 시간 간격 동안의 오류 조건 수 또는 백분율, 오류를 나타내는 상태 코드 범위와 같이 회로 차단기를 발생시키는 규칙을 정의합니다.
- 회로 차단기가 발생되면 API Management는 정의된 시간 동안 백 엔드 서비스에 대한 요청 전송을 중지하고 클라이언트에 503 서비스를 사용할 수 없음 응답을 반환합니다.
- 구성된 발생 기간이 지나면 회로가 다시 설정되고 트래픽이 백 엔드로 다시 시작됩니다.
백 엔드 회로 차단기는 백 엔드가 오버로드 상황에서 복구할 수 있도록 하는 회로 차단기 패턴의 구현입니다. API Management 게이트웨이 및 백 엔드 서비스를 보호하기 위해 구현할 수 있는 일반적인 속도 제한 및 동시성 제한 정책을 보강합니다.
참고 항목
- 현재 백 엔드 회로 차단기는 API Management의 소비 계층에서 지원되지 않습니다.
- API Management 아키텍처의 분산 특성으로 인해 회로 차단기 발생 규칙은 근사값입니다. 게이트웨이의 다른 인스턴스는 동기화되지 않으며 동일한 인스턴스의 정보에 따라 회로 차단기 규칙을 적용합니다.
- 현재 백 엔드 회로 차단기에 대해 하나의 규칙만 구성할 수 있습니다.
예시
Azure Portal, API Management REST API 또는 Bicep 또는 ARM 템플릿을 사용하여 백 엔드에서 회로 차단기를 구성합니다. 다음 예제에서는 한 시간내 서버 오류를 나타내는 세 개 이상의 상태 코드가 있는 경우 API Management 인스턴스 myAPIM 트립의 5xx
에 있는 회로 차단기가 발생합니다.
이 예제의 회로 차단기는 1시간 후에 다시 설정됩니다. 응답에 Retry-After
헤더가 있는 경우 회로 차단기는 값을 수락하고 백 엔드에 요청을 다시 보내기 전에 지정된 시간 동안 기다립니다.
- Azure Portal에서 API Management 인스턴스로 이동합니다.
- 왼쪽 메뉴에서 API>백엔드>를 선택하고 백엔드를 선택하십시오.
- 백 엔드 페이지에서 설정>회로 차단기 설정>새로 추가를 선택합니다.
-
새 회로 차단기 만들기 페이지에서 규칙을 구성합니다.
- 규칙 이름: myBackend와 같은 규칙의 이름을 입력합니다.
- 실패 횟수: 3을 입력합니다.
- 실패 간격: 기본값인 1시간을 그대로 둡니다.
- 오류 상태 코드 범위: 500 - 599를 선택합니다.
- 여정 기간: 기본값인 1시간을 그대로 둡니다.
- HTTP 응답에서 'Retry-After' 헤더를 선택합니다. True(수락)를 선택합니다.
부하 분산 풀
API Management는 API에 대한 여러 백 엔드를 구현하고 해당 백 엔드에서 요청을 부하 분산하려는 경우 백 엔드풀을 지원합니다. 풀은 부하 분산을 위해 단일 엔터티로 처리되는 백 엔드의 컬렉션입니다.
다음과 같은 시나리오에 백 엔드 풀을 사용합니다.
- 부하를 여러 백 엔드로 분산합니다. 이 백 엔드에는 개별 백 엔드 회로 차단기가 있을 수 있습니다.
- 업그레이드를 위해 한 백 엔드 집합에서 다른 백 엔드 집합으로 부하를 이동합니다(파란색-녹색 배포).
참고 항목
- 풀에 최대 30개의 백 엔드를 포함할 수 있습니다.
- API Management 아키텍처의 분산 특성으로 인해 백 엔드 부하 분산은 근사값입니다. 게이트웨이의 다른 인스턴스는 동기화되지 않으며 동일한 인스턴스의 정보에 따라 부하를 분산합니다.
부하 분산 옵션
API Management는 백 엔드 풀에 대해 다음과 같은 부하 분산 옵션을 지원합니다.
부하 분산 옵션 | 설명 |
---|---|
라운드 로빈 | 요청은 기본적으로 풀의 백 엔드에 균등하게 분산됩니다. |
가중치 적용 | 가중치는 풀의 백 엔드에 할당되고 요청은 각 백 엔드의 상대적 가중치에 따라 분산됩니다. 청록색 배포와 같은 시나리오에 유용합니다. |
우선 순위 기반 | 백 엔드는 우선 순위 그룹으로 구성됩니다. 요청은 우선 순위가 높은 그룹으로 먼저 전송됩니다. 그룹 내에서 요청은 균등하게 또는 할당된 가중치에 따라 분산됩니다. |
참고 항목
우선 순위가 낮은 그룹의 백 엔드는 회로 차단기 규칙이 트립되기 때문에 우선 순위가 높은 그룹의 모든 백 엔드를 사용할 수 없는 경우에만 사용됩니다.
세션 인식
위의 부하 분산 옵션을 사용하면 필요에 따라 세션 인식(세션 선호도)을 사용하도록 설정하여 세션 중 특정 사용자의 모든 요청이 풀의 동일한 백 엔드로 전달되도록 합니다. API Management는 세션 상태를 유지하기 위해 세션 ID 쿠키를 설정합니다. 이 옵션은 예를 들어 AI 채팅 도우미 또는 다른 대화형 에이전트와 같은 백 엔드가 있는 시나리오에서 동일한 세션에서 동일한 엔드포인트로 요청을 라우팅하는 데 유용합니다.
참고 항목
부하 분산 풀의 세션 인식은 AI Gateway 초기업데이트 그룹에 먼저 릴리스됩니다.
세션 인식을 위한 쿠키 관리
세션 인식을 사용하는 경우 클라이언트는 쿠키를 적절하게 처리해야 합니다. 클라이언트는 세션 상태를 유지하기 위해 헤더 값 Set-Cookie
을 저장하고 후속 요청과 함께 보내야 합니다.
API Management 정책을 사용하여 세션 인식에 대한 쿠키를 설정할 수 있습니다. 예를 들어 Assistants API의 경우( Azure AI Foundry 모델에서 Azure OpenAI의 기능) 클라이언트는 세션 ID를 유지하고, 본문에서 스레드 ID를 추출하고, 쌍을 유지하고, 각 호출에 대해 올바른 쿠키를 보내야 합니다. 또한 클라이언트는 쿠키를 보낼 시기 또는 쿠키 헤더를 보내지 않을 시기를 알아야 합니다. 다음 예제 정책을 정의하여 이러한 요구 사항을 적절하게 처리할 수 있습니다.
<policies>
<inbound>
<base />
<set-backend-service backend-id="APIMBackend" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<set-variable name="gwSetCookie" value="@{
var payload = context.Response.Body.As<JObject>();
var threadId = payload["id"];
var gwSetCookieHeaderValue = context.Request.Headers.GetValueOrDefault("SetCookie", string.Empty);
if(!string.IsNullOrEmpty(gwSetCookieHeaderValue))
{
gwSetCookieHeaderValue = gwSetCookieHeaderValue + $";Path=/threads/{threadId};";
}
return gwSetCookieHeaderValue;
}" />
<set-header name="Set-Cookie" exists-action="override">
<value>Cookie=gwSetCookieHeaderValue</value>
</set-header>
</outbound>
<on-error>
<base />
</on-error>
</policies>
예시
포털, API Management REST API 또는 Bicep 또는 ARM 템플릿을 사용하여 백 엔드 풀을 구성합니다. 다음 예제에서는 API Management 인스턴스 myAPIM의 백 엔드 myBackendPool이 백 엔드 풀로 구성됩니다. 풀의 예제 백 엔드 이름은 backend-1 및 backend-2입니다. 두 백 엔드 모두 우선 순위가 가장 높은 그룹에 있습니다. 그룹 내에서 백 엔드-1 은 백 엔드-2보다 가중치가 더 큽니다.
- Azure Portal에서 API Management 인스턴스로 이동합니다.
- 왼쪽 메뉴에서 API>백엔드>를 선택하고 백엔드를 선택하십시오.
- 백 엔드 페이지에서 부하 분산 장치 탭을 선택합니다.
- + 새 풀 만들기를 선택합니다.
-
부하 분산된 새 풀 만들기 페이지에서 다음을 수행합니다.
- 이름: myBackendPool과 같은 풀의 이름을 입력합니다.
- 설명: 필요에 따라 설명을 입력합니다.
- 풀에 백 엔드 추가: 풀에 추가할 하나 이상의 백 엔드를 선택합니다.
- 백 엔드 가중치 및 우선 순위: 풀에 있는 각 백 엔드의 가중치 및 우선 순위를 구성하려면 가중치 및 우선 순위 사용자 지정 을 선택합니다. 예를 들어 백 엔드-1 과 백 엔드-2라는 두 개의 백 엔드를 추가한 경우 백 엔드-1 의 가중치를 3으로 설정하고 백 엔드-2 의 가중치를 1로 설정하고 두 백 엔드의 우선 순위를 1로 설정합니다.
- 선택하고생성합니다.
제한 사항
-
개발자 및 프리미엄 계층의 경우 내부 가상 네트워크에 배포된 API Management 인스턴스는 게이트웨이 엔드포인트 URL 및 백 엔드 URL이 동일할 때 HTTP 500
BackendConnectionFailure
오류가 발생할 수 있습니다. 이 제한 사항이 발생하면 기술 커뮤니티 블로그의 내부 가상 네트워크 모드에서 자체 연결 API Management 요청 제한 문서의 지침을 따릅니다. - 현재 백 엔드 회로 차단기에 대해 하나의 규칙만 구성할 수 있습니다.
관련 콘텐츠
- 블로그: Azure OpenAI Service를 사용하여 Azure API Management 회로 차단기 및 부하 분산 사용
- Azure Portal을 사용하여 Service Fabric 백 엔드를 설정합니다.
- 빠른 시작 OpenAI 요청 부하 분산을 위해 Bicep을 사용하여 Azure API Management에서 백 엔드 풀 만들기
- 회로 차단기가 트립되거나 다시 설정될 때 게이트웨이에서 생성되는 Event Grid 이벤트에 대한 자세한 내용은 Event Grid 원본으로 Azure API Management 를 참조하세요. 백 엔드 문제가 에스컬레이션되기 전에 이러한 이벤트를 사용하여 작업을 수행합니다.