Reset Quota ランタイム エラーのトラブルシューティング

現在、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"
        }
    }
}

原因

このエラーは、Reset Quota ポリシーの <Quota> 要素で指定された Quota ポリシーが API プロキシで定義されていない場合に発生します。<Quota> 要素は必須であり、Reset Quota ポリシーでカウンタを更新するターゲット Quota ポリシーを特定します。このターゲット Quota ポリシーは、同じ API プロキシ内で作成および定義し、フロー中で使用できるようにする必要があります。

たとえば、<Quota> 要素が次のように定義されていて、API プロキシで MyQuotaPolicy が定義されていない場合、上記のエラーが発生します。

<Quota name="MyQuotaPolicy">

診断

  1. Reset Quota ポリシーで指定された無効な割り当てポリシー名を特定します。faultstring から Quota ポリシーの名前を確認できます。たとえば、次の faultstring では、MyQuotaPolicy: がポリシー名です。

    "faultstring": "Invalid rate limit policy MyQuotaPolicy"
    
  2. エラーが発生した API プロキシで、各 Reset Quota ポリシーを調べてください。必須の要素 <Quota> で指定された Quota ポリシーが、上記の手順 1 で特定した名前と一致している Reset Quota ポリシーを特定します。

    たとえば、次の Reset Quota ポリシーでは、faultstring の内容と一致している MyQuotaPolicy という名前の Quota ポリシーが指定されています。

    <?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. この Quota ポリシーが同じ API プロキシ内で作成され、定義されているかどうか確認します。Quota ポリシーが同じ API プロキシ内に存在しない場合、それがエラーの原因です。

    上記の例では、Quota ポリシー MyQuotaPolicy は、Reset Quota ポリシー Reset_Quota_Demo が実行される前のフローに存在していることを前提としています。

    Quota ポリシー MyQuotaPolicy がフローに存在していないため、次のエラーコードが返されています。

"errorcode": "policies.resetquota.InvalidRLPolicy"

解決策

<Quota> 要素で宣言された Quota ポリシーが API プロキシで定義されていることを確認します。このターゲット Quota ポリシーは、Reset Quota ポリシーの実行時に使用可能でなければなりません。

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. エラーが発生した Reset Quota ポリシーと、解決できない参照変数の名前を特定します。どちらの項目もエラー レスポンスで確認できます。

    たとえば、次の 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. エラーが発生した Reset Quota ポリシーの 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. Reset Quota ポリシーが実行されるフローで、参照変数が定義され、使用可能かどうかを確認します。

  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 がリクエストの一部として渡されないため、上記の Reset Quota ポリシーの要素 <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> 要素で参照される変数が存在し、定義され、Reset Quota ポリシーが実行される特定のフローで使用可能であることを確認します。

上記の例を修正するには、次に示すように、リクエストを変更して 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 プロキシで各 Reset Quota ポリシーを調べて、<Quota> 要素で指定された参照変数の名前を適切に解決できない Reset Quota ポリシーを特定します。

  2. Reset Quota ポリシーが実行されるフローで、変数が定義され、使用可能かどうかを確認します。

  3. 変数が次のいずれかの状態になっていないか確認します。

    1. 範囲外(ポリシーが実行されている特定のフローで使用できない)
    2. 解決できない(定義されていない)

    該当する場合は、それがエラーの原因です。

    以下の例では、ターゲット Quota ポリシーの名前は、quotapolicy という名前のリクエスト ヘッダーから取得することが前提となっています。ただし、Edge では request.header.quotapolicy を解決します。これは、API リクエストの一部としてヘッダー quotapolicy を渡していない場合に発生します。

    <?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 がリクエストの一部として渡されないため、上記の Reset Quota ポリシーの要素 <Quota> で使用される参照 request.header.quotapolicy が定義されず、解決できません。その結果、エラー レスポンスが返されます。

    "errorcode": "policies.resetquota.FailedToResolveRLPolicy"
    

解決策

<Quota> 要素で参照される属性 ref がランタイム時に解決され、Reset Quota ポリシーが実行される特定のフローで使用できることを確認します。

上記の例を修正するには、次に示すように、リクエストを変更して quotapolicy ヘッダーを含めます。

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