적용 대상: 모든 API Management 계층
Azure API Management ProxyError 개체를 제공하여 게시자가 요청을 처리하는 동안 발생할 수 있는 오류 조건에 응답할 수 있도록 합니다.
context.LastError 속성을 통해 ProxyError 객체에 액세스합니다.
on-error 정책 섹션의 정책은 ProxyError 개체를 사용할 수 있습니다. 이 문서에서는 Azure API Management에서 오류 처리 기능에 대한 참조를 제공합니다.
API Management에서 오류 처리
Azure API Management의 정책은 다음 예에 표시된 것처럼 inbound, backend, outbound 및 on-error 섹션으로 나뉩니다.
<policies>
<inbound>
<!-- statements to be applied to the request go here -->
</inbound>
<backend>
<!-- statements to be applied before the request is
forwarded to the backend service go here -->
</backend>
<outbound>
<!-- statements to be applied to the response go here -->
</outbound>
<on-error>
<!-- statements to be applied if there is an error
condition go here -->
</on-error>
</policies>
요청을 처리하는 동안 기본 제공 단계는 요청에 대한 범위에 있는 모든 정책과 함께 실행됩니다. 오류가 발생하는 경우 처리가 on-error 정책 섹션으로 즉시 이동합니다.
on-error 정책 섹션은 모든 범위에서 사용할 수 있습니다. API 게시자는 오류를 Azure Event Hubs 로깅하거나 호출자에게 반환할 새 응답을 만드는 등 사용자 지정 동작을 구성할 수 있습니다.
참고
섹션은 on-error 기본적으로 정책에 없습니다.
on-error 섹션을 정책에 추가하려면 정책 편집기에서 원하는 정책을 찾아 추가합니다. 정책 구성에 대한 자세한 내용은 API Management에서 정책을 참조하세요.
섹션이 없 on-error 으면 오류 조건이 발생하는 경우 호출자는 400 또는 500 HTTP 응답 메시지를 받습니다.
오류 발생 시 허용되는 정책
다음 정책을 on-error 정책 섹션에서 사용할 수 있습니다.
- 고르다
- 변수를 설정하다
- 찾기 및 바꾸기
- return-response
- 헤더 설정
- 설정-방법
- 상태 설정
- send-request
- 단방향 요청 송신
- 이벤트 허브로 로깅
- json-to-xml
- xml-to-json
- 동시성 제한
- mock-response
- 다시 시도
- 추적
마지막 오류
오류가 발생하여 컨트롤이 on-error 정책 섹션으로 이동하면, 오류는 context.LastError 속성에 저장됩니다.
on-error 섹션의 정책은 context.LastError에 액세스할 수 있습니다.
LastError 에는 다음 속성이 있습니다.
| 이름 | 유형 | 설명 | 필수 |
|---|---|---|---|
Source |
문자열 | 오류가 발생한 요소의 이름입니다. 정책 또는 기본 제공 파이프라인 단계 이름일 수 있습니다. | 예 |
Reason |
문자열 | 오류 처리에 사용될 수 있는 컴퓨터에 익숙한 오류 코드입니다. | 아니요 |
Message |
문자열 | 사람이 읽을 수 있는 오류 설명입니다. | 예 |
Scope |
문자열 | 오류가 발생한 범위의 이름입니다. | 아니요 |
Section |
문자열 | 오류가 발생한 섹션 이름입니다. 가능한 값: inbound, backend, outbound또는 on-error. |
아니요 |
Path |
문자열 | 예를 들어 choose[3]\\when[2]중첩된 정책 계층 구조를 지정합니다. 중첩된 정책의 여러 인스턴스는 1에서 인덱싱됩니다. |
아니요 |
PolicyId |
문자열 | 오류가 발생한 정책에서 id 특성 값(고객이 지정한 경우) |
아니요 |
팁
를 통해 context.Response.StatusCode상태 코드에 액세스할 수 있습니다.
참고
모든 정책에는 정책의 루트 요소에 추가할 수 있는 선택적 id 특성이 포함됩니다. 오류 조건이 발생할 때 이 특성이 정책에 포함되어 있는 경우, context.LastError.PolicyId 속성을 사용하여 특성 값을 검색할 수 있습니다.
기본 제공 단계에 대해 미리 정의된 오류
기본 제공 처리 단계를 평가하는 동안 발생할 수 있는 오류 조건에 대해 다음 오류가 미리 정의됩니다.
| 원본 | 조건 | 원인 | 메시지 |
|---|---|---|---|
| 구성 | URI가 API 또는 작업과 일치하지 않음 | OperationNotFound | 들어오는 요청을 작업과 일치시킬 수 없습니다. |
| 허가 | 구독 키가 제공되지 않음 | 구독 키를 찾을 수 없음 | 구독 키가 누락되어 액세스가 거부되었습니다. 이 API에 요청을 수행할 때 구독 키를 포함해야 합니다. |
| 권한 | 구독 키 값이 잘못됨 | 구독 키 유효하지 않음 | 잘못된 구독 키로 인해 액세스가 거부되었습니다. 활성 구독에 대해 유효한 키를 제공해야 합니다. |
| 여러 가지 | 요청이 보류 중인 동안 클라이언트가 다운스트림 연결(클라이언트에서 API Management 게이트웨이로)을 중단했습니다. | 클라이언트 연결 실패 | 여러 가지 |
| 여러 가지 | 백 엔드가 중단되었거나 업스트림 연결을 설정할 수 없습니다(API Management 게이트웨이에서 백 엔드 서비스로) | 백엔드 연결 실패 | 여러 가지 |
| 여러 가지 | 특정 식을 평가하는 동안 런타임 예외가 발생했습니다. | 표현 값 평가 실패 | 여러 가지 |
정책에 대해 미리 정의된 오류
정책 평가 중에 발생할 수 있는 오류 조건에 대해 다음 오류가 미리 정의됩니다.
| 원본 | 조건 | 원인 | 메시지 |
|---|---|---|---|
| 속도 제한 | 속도 제한 초과 | RateLimitExceeded | 속도 제한을 초과했습니다. |
| 할당량 | 할당량이 초과됨 | 할당량 초과 | 호출 볼륨 할당량을 초과했습니다. 할당량이 xx:xx:xx에서 보충됩니다. 또는 대역폭 할당량을 초과했습니다. 할당량이 xx:xx:xx에서 보충됩니다. |
| jsonp | 콜백 매개 변수 값이 잘못되었습니다(잘못된 문자 포함). | 콜백 매개변수 유효하지 않음 | 콜백 매개 변수 {callback-parameter-name} 값이 올바른 JavaScript 식별자가 아닙니다. |
| IP 필터링 | 요청에서 호출자 IP를 파싱하는 데 실패했습니다. | FailedToParseCallerIP | 호출자에 대한 IP 주소를 설정하지 못했습니다. 액세스가 거부되었습니다. |
| IP 필터링 | 호출자 IP가 허용 목록에 없습니다. | 전화 발신자 IP가 허용되지 않음 | 호출자 IP 주소 {ip-address}이(가) 허용되지 않습니다. 액세스가 거부되었습니다. |
| IP 필터링 | 호출자 IP가 차단 목록에 있음 | 발신자 IP 차단됨 | 호출자 IP 주소가 차단되었습니다. 액세스가 거부되었습니다. |
| 검사 헤더 | 필수 헤더가 없거나 값이 누락됨 | 헤더를 찾을 수 없음 | 헤더 {header-name}이(가) 요청에 없습니다. 액세스가 거부되었습니다. |
| 검사 헤더 | 필수 헤더가 없거나 값이 누락됨 | 헤더 값 허용되지 않음 | {header-value}의 헤더 {header-name} 값이 허용되지 않습니다. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 요청에 JWT(JSON 웹 토큰)가 없습니다. | TokenNotPresent | JWT가 없습니다. |
| JWT 유효성 검사 | 서명 유효성 검사에 실패 | 토큰 서명이 올바르지 않음 | <jwt 라이브러리의 메시지>. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 잘못된 대상 | TokenAudienceNotAllowed | <jwt 라이브러리의 메시지>. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 잘못된 발급자 | 토큰 발급자가 허용되지 않음 | <jwt 라이브러리의 메시지>. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 토큰이 만료됨 | 토큰 만료 | <jwt 라이브러리의 메시지>. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 서명 키가 ID로 확인되지 않음 | TokenSignatureKeyNotFound | <jwt 라이브러리의 메시지>. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 토큰에서 필수 클레임이 누락됨 | 토큰 클레임을 찾을 수 없음 | JWT에는 다음 클레임이 없습니다. <c1>, <c2>, ... 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 클레임 값이 일치하지 않음 | 토큰 클레임 값 허용되지 않음 | 클레임 {claim-name}의 값 {claim-value}는 허용되지 않습니다. 액세스가 거부되었습니다. |
| JWT 유효성 검사 | 기타 유효성 검사 실패 | JWT 유효하지 않음 | <jwt 라이브러리의 메시지> |
| 요청 전달 또는 요청 보내기 | 구성된 시간 제한 내에 백 엔드에서 HTTP 응답 상태 코드 및 헤더를 받지 못했습니다. | 시간 제한 | 여러 가지 |
예시
API 정책을 다음 값으로 설정합니다.
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<set-header name="ErrorSource" exists-action="override">
<value>@(context.LastError.Source)</value>
</set-header>
<set-header name="ErrorReason" exists-action="override">
<value>@(context.LastError.Reason)</value>
</set-header>
<set-header name="ErrorMessage" exists-action="override">
<value>@(context.LastError.Message)</value>
</set-header>
<set-header name="ErrorScope" exists-action="override">
<value>@(context.LastError.Scope)</value>
</set-header>
<set-header name="ErrorSection" exists-action="override">
<value>@(context.LastError.Section)</value>
</set-header>
<set-header name="ErrorPath" exists-action="override">
<value>@(context.LastError.Path)</value>
</set-header>
<set-header name="ErrorPolicyId" exists-action="override">
<value>@(context.LastError.PolicyId)</value>
</set-header>
<set-header name="ErrorStatusCode" exists-action="override">
<value>@(context.Response.StatusCode.ToString())</value>
</set-header>
<base />
</on-error>
</policies>
승인되지 않은 요청을 보내면 다음 응답이 발생합니다.
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 참조를 통해 정책 문과 해당 설정의 전체 목록을 확인하십시오.
- 정책 표현식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- 폴리시 샘플 리포지토리
- Azure API Management 정책 도구 키트
- Copilot 지원을 받아 정책을 만들고, 설명하며, 문제를 해결하세요.