할당량 재설정 런타임 오류 문제 해결

현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

InvalidRLPolicy

오류 코드

policies.resetquota.InvalidRLPolicy

오류 응답 본문

{
    "fault": {
        "faultstring": "Invalid rate limit policy quota_policy_name",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

오류 메시지 예

{
    "fault": {
        "faultstring": "Invalid rate limit policy MyQuotaPolicy",
        "detail": {
            "errorcode": "policies.resetquota.InvalidRLPolicy"
        }
    }
}

원인

이 오류는 할당량 재설정 정책의 <Quota> 요소에 지정된 할당량 정책이 API 프록시에 정의되지 않은 경우에 발생합니다. <Quota> 요소는 필수이며 할당량 재설정 정책을 통해 카운터를 업데이트해야 하는 대상 할당량 정책을 식별합니다. 이 대상 할당량 정책은 동일한 API 프록시 내에서 생성 및 정의되어야 하며 흐름 중에 사용할 수 있어야 합니다.

예를 들어 <Quota> 요소가 아래와 같이 정의되어 있지만 API 프록시에서 MyQuotaPolicy가 정의되지 않은 경우 위의 오류가 발생합니다.

<Quota name="MyQuotaPolicy">

진단

  1. 할당량 재설정 정책에 지정된 잘못된 할당량 정책 이름을 식별합니다. faultstring에서 할당량 정책의 이름을 찾을 수 있습니다. 예를 들어 다음 faultstring에서 할당량 정책 이름은 MyQuotaPolicy:입니다.

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. 오류가 발생한 API 프록시의 각 할당량 재설정 정책을 확인합니다. 필수 요소 <Quota> 내에 지정된 할당량 정책이 위의 1단계에서 식별한 이름과 일치하는 특정 재설정 할당량 정책을 식별합니다.

    예를 들어 다음 할당량 재설정 정책은 faultstring에 있는 이름과 일치하는 MyQuotaPolicy라는 할당량 정책을 지정합니다.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
           <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    
    
  3. 이 할당량 정책이 동일한 API 프록시 내에서 생성 및 정의되었는지 확인합니다. 할당량 정책이 동일한 API 프록시 내에 존재하지 않는다면, 이는 오류의 원인이 됩니다.

    위의 예시에서 할당량 재설정 정책 Reset_Quota_Demo가 실행되기 전에 할당량 정책 MyQuotaPolicy는 흐름에 있어야 합니다.

    흐름에 할당량 정책 MyQuotaPolicy가 존재하지 않으므로 다음의 오류 코드가 수신됩니다.

"errorcode": "policies.resetquota.InvalidRLPolicy"

해결 방법

<Quota> 요소에 선언된 할당량 정책이 API 프록시에 정의되어 있는지 확인합니다. 할당량 재설정 정책이 실행될 때 이 대상 할당량 정책을 사용할 수 있어야 합니다.

FailedToResolveAllowCountRef

오류 코드

policies.resetquota.FailedToResolveAllowCountRef

오류 응답 본문

Failed to resolve allow count reference reference_name for identifier identifier_name
in ResetQuotaStepDefinition:policy_name;API Proxy:proxy_name;Revision:
revision_number;Environment:env_name;Organization:org_name

오류 메시지 예

Failed to resolve allow count reference request.header.allowcount for identifier
identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
Revision:10;Environment:test;Organization:demo

클라이언트에 반환되는 오류는 다음과 같습니다. policies.ratelimit.QuotaViolation

원인

이 오류는 정책의 <Allow> 요소에서 허용 횟수를 포함하는 변수에 대한 참조를 값으로 확인할 수 없는 경우에 발생합니다. 이 요소는 필수이며 줄일 할당량 카운터의 양을 지정합니다.

진단

  1. 오류가 발생한 할당량 재설정 정책과 확인할 수 없는 참조 변수의 이름을 식별합니다. 이러한 두 항목은 모두 오류 응답에서 찾을 수 있습니다.

    예를 들어 다음 faultstring에서 정책 이름은 ResetQuota이고 참조는 request.header.allowcount입니다.

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    
  2. 실패한 할당량 정책 XML에서, 사용된 참조 변수의 이름이 오류 응답(위의 1단계)에서 식별된 참조 이름과 일치하는지 확인합니다.

    예를 들어 다음 정책은 오류에서 식별된 이름과 일치하는 request.header.allowcount라는 참조로 요소를 설정합니다.

    <ResetQuota async="false" continueOnError="false" enabled="true" name="ResetQuota">
        <DisplayName>ResetQuota</DisplayName>
        <Properties/>
        <Quota name="MyQuotaPolicy">
            <Identifier name="identifierName">
                <Allow ref="request.header.allowcount"/>
            </Identifier>
        </Quota>
    </ResetQuota>
    
  3. 참조 변수가 정의되어 있으며 할당량 재설정 정책이 실행되는 흐름에서 사용할 수 있는지 확인합니다.

  4. 변수가 다음 중 하나인 경우

    1. 범위를 벗어난 경우(정책이 실행 중인 특정 흐름에서 사용할 수 없음)
    2. 확인할 수 없는 경우(정의되지 않음)

    이는 오류의 원인이 됩니다.

    위의 예시에서 <Allow> 요소의 허용 횟수 값은 allowcount라는 요청 헤더에서 가져와야 합니다. 하지만 Edge는 request.header.allowcount를 확인할 수 없습니다. 이 문제는 헤더 allowcount가 API 요청의 일부로 전달되지 않은 경우에 발생합니다.

    다음은 헤더 allowcount를 요청의 일부로 전달하지 않는 샘플 API 요청입니다.

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    헤더 allowcount는 요청의 일부로 전달되지 않으므로, 위의 할당량 재설정 정책의 요소 <Allow>에서 사용된 변수 request.header.allowcount는 정의되지 않고 확인할 수 없습니다. 따라서 다음과 같은 오류 응답이 수신됩니다.

    Failed to resolve allow count reference request.header.allowcount for identifier
    identifierName in ResetQuotaStepDefinition:ResetQuota;API Proxy:Reset_Quota;
    Revision:10;Environment:test;Organization:demo
    

해결 방법

<Allow> 요소에서 참조된 변수가 존재하거나 정의되었으며 이를 할당량 재설정 정책이 실행되는 특정 흐름에서 사용 가능한지 확인합니다.

위에 표시된 예시를 수정하려면 아래와 같이 요청에 allowcount 헤더가 포함되도록 요청을 수정하면 됩니다.

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "allowcount:30"

FailedToResolveRLPolicy

오류 코드

policies.resetquota.FailedToResolveRLPolicy

오류 응답 본문

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

오류 메시지 예

{
    "fault": {
        "faultstring": "Failed to resolve rate limit policy",
        "detail": {
            "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
        }
    }
}

원인

이 오류는 <Quota> 요소의 ref 속성에서 참조한 변수를 확인할 수 없을 때 발생합니다.

예를 들어 ref 속성이 <Quota> 요소에서 request.header.quotapolicy로 설정되었지만 API 프록시 흐름에서 사용할 수 없는 경우 위의 오류가 발생합니다.

<Quota ref="request.header.quotapolicy">

진단

  1. 오류가 발생한 API 프록시의 할당량 재설정 정책을 검토하고 <Quota> 요소에 지정된 참조 변수의 이름을 제대로 확인할 수 없는 할당량 재설정 정책을 확인합니다.

  2. 변수가 정의되어 있으며 할당량 재설정 정책이 실행되는 흐름에서 사용할 수 있는지 확인합니다.

  3. 변수가 다음 중 하나인 경우

    1. 범위를 벗어난 경우(정책이 실행되는 특정 흐름에서 사용할 수 없음)
    2. 확인할 수 없는 경우(정의되지 않음)

    이는 오류의 원인이 됩니다.

    아래 예시에서 대상 할당량 정책의 이름은 quotapolicy라는 요청 헤더에서 가져와야 합니다. 하지만 Edge는 request.header.quotapolicy를 확인할 수 없습니다. 이 문제는 헤더 quotapolicy가 API 요청의 일부로 전달되지 않은 경우에 발생합니다.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResetQuota async="false" continueOnError="false" enabled="true" name="Reset_Quota_Demo">
        <DisplayName>Reset_Quota_Demo</DisplayName>
        <Properties/>
        <Quota ref="request.header.quotapolicy">
            <Identifier name="identifierName" ref="request.header.identifier">
                <Allow>100</Allow>
            </Identifier>
        </Quota>
    </ResetQuota>
    

    다음은 헤더 quotapolicy를 요청의 일부로 전달하지 않는 샘플 API 요청입니다.

    curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json"
    

    헤더 quotapolicy는 요청의 일부로 전달되지 않으므로, 위의 할당량 재설정 정책의 요소 <Quota>에서 사용된 참조 request.header.quotapolicy는 정의되지 않고 확인할 수 없습니다. 따라서 다음과 같은 오류 응답이 수신됩니다.

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

해결 방법

<Quota> 요소에 참조된 속성 ref가 런타임 시 확인되고 할당량 재설정 정책이 실행되는 특정 흐름에서 사용 가능한지 확인합니다.

위에 표시된 예시를 수정하려면 아래와 같이 요청에 quotapolicy 헤더가 포함되도록 요청을 수정하면 됩니다.

curl -v http://demo-eval-test.apigee.net/v1/reset_quota -H "Content-Type: application/json" -H "quotapolicy:MyQuotaPolicy"