키로 호출 속도 제한
적용 대상: 개발자 | 기본 | 기본 v2 | 표준 | 표준 v2 | 프리미엄 | 프리미엄 v2
rate-limit-by-key
정책은 호출 속도를 지정된 기간당 지정된 숫자로 제한하여 키 하나당 최대 API 사용을 차단합니다. 키는 임의의 문자열 값을 포함할 수 있으며 일반적으로 정책 식을 사용하여 제공됩니다. 제한에 포함될 요청을 지정하기 위해 선택적 증분 조건을 추가할 수 있습니다. 이 호출 속도를 초과할 경우 호출자는 429 Too Many Requests
응답 상태 코드를 수신합니다.
속도 제한과 할당량 간의 차이를 이해하려면 속도 제한 및 할당량을 참조하세요.
주의
제한 아키텍처의 분산 특성으로 인해 속도 제한은 완전히 정확하지 않습니다. 구성된 요청 수와 허용되는 실제 요청 수의 차이는 요청 볼륨 및 속도, 백 엔드 대기 시간 및 기타 요인에 따라 달라집니다.
참고 항목
정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. 이 정책을 구성하는 데 도움이 되도록 포털은 양식 기반의 안내형 편집기를 제공합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.
정책 문
<rate-limit-by-key calls="number"
renewal-period="seconds"
increment-condition="condition"
increment-count="number"
counter-key="key value"
retry-after-header-name="custom header name, replaces default 'Retry-After'"
retry-after-variable-name="policy expression variable name"
remaining-calls-header-name="header name"
remaining-calls-variable-name="policy expression variable name"
total-calls-header-name="header name"/>
특성
특성 | 설명 | 필수 항목 | 기본값 |
---|---|---|---|
호출 | renewal-period 에 지정된 시간 간격 동안 키 값에 허용되는 최대 총 호출 수입니다. 정책 식이 허용됩니다. |
예 | 해당 없음 |
counter-key | 속도 제한 정책에 사용할 키입니다. 각 키 값에 대해 정책이 구성된 모든 범위에 단일 카운터가 사용됩니다. 정책 식이 허용됩니다. | 예 | 해당 없음 |
increment-condition | 요청을 속도에 포함할지를 지정하는 부울 식입니다(true ). 정책 식은 허용되지만 평가 및 카운터 증분 작업을 아웃바운드 파이프라인의 끝으로 연기합니다. |
아니요 | 해당 없음 |
increment-count | 요청당 카운터가 증가하는 수입니다. 정책 식은 허용되지만 평가 및 카운터 증분을 아웃바운드 파이프라인의 끝으로 연기합니다. | 아니요 | 1 |
renewal-period | 허용되는 요청 수가 calls 에 지정된 값을 초과하지 않아야 하는 슬라이딩 윈도우의 길이(초 단위)입니다. 허용되는 최대값: 300초. 정책 식이 허용됩니다. |
예 | 해당 없음 |
retry-after-header-name | 키 값에 대해 지정된 호출 속도가 초과된 후 권장되는 다시 시도 간격(초)을 값으로 가진 사용자 지정 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. | 아니요 | Retry-After |
retry-after-variable-name | 키 값에 대해 지정된 호출 속도가 초과된 후 권장되는 다시 시도 간격(초)을 저장하는 정책 식 변수의 이름입니다. 정책 식은 허용되지 않습니다. | 아니요 | 해당 없음 |
remaining-calls-header-name | 각 정책 실행 후 값이 renewal-period 에 지정된 시간 간격의 키 값에 허용되는 나머지 호출 수인 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. |
아니요 | 해당 없음 |
remaining-calls-variable-name | 각 정책 실행 후 renewal-period 에 지정된 시간 간격의 키 값에 허용되는 나머지 호출 수를 저장하는 정책 식 변수의 이름입니다. 정책 식은 허용되지 않습니다. |
아니요 | 해당 없음 |
total-calls-header-name | calls 에 값이 지정된 응답 헤더의 이름입니다. 정책 식은 허용되지 않습니다. |
아니요 | 해당 없음 |
사용
사용법 참고 사항
- API Management는 정책에 지정하는 각
counter-key
값에 대해 단일 카운터를 사용합니다. 카운터는 해당 키 값으로 정책이 구성된 모든 범위에서 업데이트됩니다. 서로 다른 범위(예: 특정 API 또는 제품)에서 별도의 카운터를 구성하려면 서로 다른 범위에서 서로 다른 키 값을 지정합니다. 예를 들어, 범위를 식별하는 문자열을 식 값에 추가합니다. - 자체 호스팅 게이트웨이의 속도 제한 수는 예를 들어, Kubernetes용 Helm 차트 배포 또는 Azure Portal 배포 템플릿 사용을 통해 클러스터 노드 전체의 게이트웨이 인스턴스 간에 로컬로 동기화하도록 구성할 수 있습니다. 그러나 속도 제한 수는 클라우드의 관리 게이트웨이를 포함하여 API Management 인스턴스에 구성된 다른 게이트웨이 리소스와 동기화되지 않습니다. 자세한 정보
- 식을 사용하거나
increment-count
정의한 경우increment-condition
평가 및 속도 제한 카운터 증가는 리포지토리에 따라 정책 식을 허용하도록 아웃바운드 파이프라인의 끝으로 연기됩니다. 이 경우 제한 초과 조건이 동시에 평가되지 않으며 다음 수신 호출 시 평가됩니다. 이로 인해 상태 코드가429 Too Many Requests
평소보다 늦게 1번 호출이 반환되는 경우가 발생합니다.
예시
다음 예제에서 60초당 10회 호출인 속도 제한은 호출자 IP 주소를 키로 사용합니다. 각 정책 실행 후 해당 기간 동안 해당 호출자 IP 주소에 대해 허용된 나머지 호출은 변수 remainingCallsPerIP
에 저장됩니다.
<policies>
<inbound>
<base />
<rate-limit-by-key calls="10"
renewal-period="60"
increment-condition="@(context.Response.StatusCode == 200)"
counter-key="@(context.Request.IpAddress)"
remaining-calls-variable-name="remainingCallsPerIP"/>
</inbound>
<outbound>
<base />
</outbound>
</policies>
이 정책에 대한 자세한 내용과 예제는 Azure API Management로 고급 요청 제한을 참조하세요.
관련 정책
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 문 및 해당 설정에 대한 전체 목록에 대한 정책 참조
- 정책 식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- Azure API Management 정책 도구 키트
- Azure의 Microsoft Copilot을 사용하는 작성자 정책