다음을 통해 공유


키로 호출 속도 제한

적용 대상: 개발자 | 기본 | 기본 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로 고급 요청 제한을 참조하세요.

정책 작업에 대한 자세한 내용은 다음을 참조하세요.