現在、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">
診断
Reset Quota ポリシーで指定された無効な割り当てポリシー名を特定します。faultstring から Quota ポリシーの名前を確認できます。たとえば、次の faultstring では、
MyQuotaPolicy:
がポリシー名です。"faultstring": "Invalid rate limit policy MyQuotaPolicy"
エラーが発生した 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>
この 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>
要素の許可カウントを含む変数への参照を解決できない場合に発生します。この要素は必須であり、割り当てカウンタを減らす量を指定します。
診断
エラーが発生した 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
エラーが発生した 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>
Reset Quota ポリシーが実行されるフローで、参照変数が定義され、使用可能かどうかを確認します。
変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
該当する場合は、それがエラーの原因です。
上記の例では、
<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">
診断
エラーが発生した API プロキシで各 Reset Quota ポリシーを調べて、
<Quota>
要素で指定された参照変数の名前を適切に解決できない Reset Quota ポリシーを特定します。Reset Quota ポリシーが実行されるフローで、変数が定義され、使用可能かどうかを確認します。
変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
該当する場合は、それがエラーの原因です。
以下の例では、ターゲット 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"