다음을 통해 공유


키로 호출 속도 제한

적용 대상: 개발자 | 기본 | 기본 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 인스턴스에 구성된 다른 게이트웨이 리소스와 동기화되지 않습니다. 자세한 정보

예시

다음 예제에서 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로 고급 요청 제한을 참조하세요.

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