Response Cache ポリシーのデプロイエラーのトラブルシューティング

InvalidTimeout

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイに失敗し、次のエラー メッセージが表示されます。

    Error Saving Revision revision_number
    CacheLookupTimeoutInSeconds value value should be greater than zero.
    

エラー メッセージの例

Error Saving Revision 2
    CacheLookupTimeoutInSeconds -1 value should be greater than zero.
    

エラーのスクリーンショットの例

原因

ResponseCache ポリシー<CacheLookupTimeoutInSeconds> 要素が負の数に設定されている場合、API プロキシのデプロイは失敗します。

たとえば、<CacheLookupTimeoutInSeconds>-1 場合、API プロキシのデプロイは失敗します。

診断

  1. ResponseCache ポリシーの <CacheLookupTimeoutInSeconds> 要素に使用されている無効な値を識別します。この情報はエラー メッセージから見つけることができます。たとえば、次のエラーでは、<CacheLookupTimeoutInSeconds> 要素に対して使用されている無効な値は -1 です。

    CacheLookupTimeoutInSeconds -1 value should be greater than zero.
        
  2. エラーが発生した特定の API プロキシで、すべての ResponseCache ポリシーを調べます。<CacheLookupTimeoutInSeconds> 要素が指定された ResponseCache ポリシーが 1 つ以上存在する可能性もあります。

    たとえば、次のポリシー構成では <CacheLookupTimeoutInSeconds>-1 に設定しており、これはエラー メッセージの内容と一致します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
            <DisplayName>Response Cache-1</DisplayName>
            <Properties/>
            <CacheKey>
                <Prefix/>
                <KeyFragment ref="request.uri" type="string"/>
            </CacheKey>
            <Scope>Exclusive</Scope>
            <ExpirySettings>
                <ExpiryDate/>
                <TimeOfDay/>
                <TimeoutInSec ref="">3600</TimeoutInSec>
            </ExpirySettings>
            <CacheLookupTimeoutInSeconds>-1</CacheLookupTimeoutInSeconds>
        </ResponseCache>
        
  3. <CacheLookupTimeoutInSeconds> が負の整数として指定されている場合、それがエラーの原因です。

解決策

ResponseCache ポリシーの <CacheLookupTimeoutInSeconds> 要素の値が、負でない整数として必ず指定されるようにします。

上記の ResponseCache ポリシーの例を修正するには、<CacheLookupTimeoutInSeconds> element 要素を 30 に変更します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
        <DisplayName>Response Cache-1</DisplayName>
        <Properties/>
        <CacheKey>
            <Prefix/>
            <KeyFragment ref="request.uri" type="string"/>
        </CacheKey>
        <Scope>Exclusive</Scope>
        <ExpirySettings>
            <ExpiryDate/>
            <TimeOfDay/>
            <TimeoutInSec ref="">3600</TimeoutInSec>
        </ExpirySettings>
        <CacheLookupTimeoutInSeconds>30</CacheLookupTimeoutInSeconds>
    </ResponseCache>
    

InvalidCacheResourceReference

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイに失敗し、次のエラー メッセージが表示されます。

    Error Deploying Revision revision_number to environment
    Invalid cache resource reference cache_resource in Step definition response_cache_policy_name. Context Revision:revision_number;APIProxy:ResponseCache;Organization:organization;Environment:environment
    

エラー メッセージの例

Error Deploying Revision 2 to prod
    Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod
    

エラーのスクリーンショットの例

原因

このエラーは、ResponseCache ポリシー<CacheResource> 要素が、API プロキシのデプロイ先の環境に存在しない名前に設定される場合に発生します。

診断

  1. Response Cache ポリシーの <CacheResource> 要素で使用されている無効なキャッシュと、エラーが発生した環境を特定します。これらの両方の項目は、エラー メッセージの中から見つけることができます。たとえば、次のエラーでは、無効なキャッシュの名前は itemscache で、環境名は prod です。

    Invalid cache resource reference itemscache in Step definition ItemsResponseCache. Context Revision:2;APIProxy:StoresInventory;Organization:kkalckstein-eval;Environment:prod
        
  2. エラーが発生した特定の API プロキシで、すべての ResponseCache ポリシーを調べます。<CacheResource> 要素で無効なキャッシュ(ステップ 1 で特定される)が指定されている特定の ResponseCache ポリシーを特定します。

    たとえば、次のポリシーでは、<CacheResource> の値を itemscache として指定しており、これはエラー メッセージの内容と一致します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResponseCache async="false" continueOnError="false" enabled="true" name="ItemsResponseCache">
          <DisplayName>ItemsResponseCache</DisplayName>
          <Properties/>
          <CacheKey>
              <Prefix/>
              <KeyFragment ref="request.uri" type="string"/>
          </CacheKey>
          <CacheResource>itemscache</CacheResource>
          <Scope>Exclusive</Scope>
          <ExpirySettings>
              <ExpiryDate/>
              <TimeOfDay/>
              <TimeoutInSec ref="">3600</TimeoutInSec>
          </ExpirySettings>
          <SkipCacheLookup/>
          <SkipCachePopulation/>
        </ResponseCache>
        
  3. (ステップ 2 で判別した)キャッシュが、(ステップ 1 で特定された)特定の環境で定義されているかどうかを確認します。

    Edge UI で、[APIs] > [Environment Configuration] に移動し、特定の環境の [Caches] タブにキャッシュが存在するかどうかを確認します。キャッシュが存在しない場合は、それがエラーの原因です。

    たとえば、以下のスクリーンショットでは、itemscache という名前のキャッシュが存在しないことがわかります。

    itemscache という名前のキャッシュが prod 環境で定義されていないため、次のエラーが発生します。

    Invalid cache resource reference does_not_exist in Step definition Response-Cache-1. Context Revision:2;APIProxy:ResponseCache;Organization:kkalckstein-eval;Environment:prod
        

解決策

<CacheResource> 要素で指定されたキャッシュ名が、API プロキシをデプロイする環境で作成されているようにします。

キャッシュの作成方法については、環境キャッシュの作成と編集をご覧ください。

ResponseCacheStepAttachmentNotAllowedReq

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイに失敗し、次のエラー メッセージが表示されます。

    Error Deploying Revision revision_number to environment
    Response cache step definition response_cache_policy_name can not be attached more than once in the request path.
    

エラー メッセージの例

Error Deploying Revision 2 to test
    Response cache step definition Response-Cache-1 can not be attached more than once in the request path.
    

エラーのスクリーンショットの例

原因

このエラーは、同じ ResponseCache ポリシーが API プロキシの任意のフロー内の複数のリクエストパスに添付されている場合に発生します。

たとえば、同じ ResponseCache ポリシーをプロキシ エンドポイントとターゲット エンドポイントの両方のリクエスト Preflow に添付すると、このエラーが発生します。

診断

  1. 複数回添付されている ResponseCache ポリシーの名前を特定します。この情報はエラー メッセージから見つけることができます。たとえば、次のエラーでは、ResponseCache ポリシーの名前は Response‑Cache‑1 です。

    Error Deploying Revision 2 to test
        Response cache step definition Response-Cache-1 can not be attached more than once in the request path.
        
  2. エラーが発生した API プロキシのプロキシ エンドポイントおよびターゲット エンドポイント内のすべてのリクエスト フローを調べます。同じ ResponseCache ポリシーが 2 つ以上のリクエスト フローに添付されている場合、それがエラーの原因です。

    次の例では、同じ ResponseCache ポリシー Response-Cache-1 が、デフォルトのプロキシ エンドポイント PreFlow およびデフォルトのターゲット エンドポイント PreFlow のリクエストパスに構成されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ProxyEndpoint name="default">
            <Description/>
            <FaultRules/>
            <PreFlow name="PreFlow">
                <Request>
                    <Step>
                        <Name>Response-Cache-1</Name>
                    </Step>
                </Request>
            ...
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <TargetEndpoint name="default">
            <Description/>
            <FaultRules/>
            <PreFlow name="PreFlow">
                <Request/>
                <Response/>
            </PreFlow>
            <PostFlow name="PostFlow">
                <Request>
                    <Step>
                        <Name>Response-Cache-1</Name>
                    </Step>
                </Request>
            ...
        

    ヒント: UI では、ナビゲータの [Proxy Endpoint] の下のフローと [Target Endpoint] の下のフローをクリックします。

解決策

1 つの ResponseCache ポリシーが、API プロキシのすべてのフローで 1 つのリクエストパスにのみ添付されるようにします。

上記の例を修正するには、2 つのリクエスト フローのいずれかから ResponseCache ポリシー Response-Cache-1 を削除します。

ResponseCacheStepAttachmentNotAllowedResp

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイに失敗し、次のエラー メッセージが表示されます。

    Error Deploying Revision revision_number to environment
    Response cache step definition response_cache_policy_name can not be attached more than once in the response path.
    

エラー メッセージの例

Error Deploying Revision 2 to test
    Response cache step definition Response-Cache-1 can not be attached more than once in the response path.
    

エラーのスクリーンショットの例

原因

このエラーは、同じ ResponseCache ポリシーが API プロキシの任意のフロー内の複数のレスポンスパスに添付されている場合に発生します。

たとえば、同じ ResponseCache ポリシーをプロキシ エンドポイントとターゲット エンドポイントの両方のレスポンス Preflow に添付すると、このエラーが発生します。

診断

  1. 複数回添付されている ResponseCache ポリシーの名前を特定します。この情報はエラー メッセージから見つけることができます。たとえば、次のエラーでは、ResponseCache ポリシーの名前は Response-Cache-1 です。

    Error Deploying Revision 2 to test
        Response cache step definition Response-Cache-1 can not be attached more than once in the response path.
        
  2. エラーが発生した API プロキシのプロキシ エンドポイントおよびターゲット エンドポイント内のすべてのリクエスト フローを調べます。同じ ResponseCache ポリシーが 2 つ以上のレスポンス フローに添付されている場合、それがエラーの原因です。

    次の例では、同じ ResponseCache ポリシー Response-Cache-1 が、デフォルトのプロキシ エンドポイント PreFlow およびデフォルトのターゲット エンドポイント PreFlow のレスポンスパスに構成されています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ProxyEndpoint name="default">
            <Description/>
            <FaultRules/>
            <PreFlow name="PreFlow">
                <Request>
                    <Step>
                        <Name>Response-Cache</Name>
                    </Step>
                </Request>
                <Response>
                    <Step>
                        <Name>Response-Cache-1</Name>
                    </Step>
                </Response>
            </PreFlow>
            ...
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <TargetEndpoint name="default">
            <Description/>
            <FaultRules/>
            <PreFlow name="PreFlow">
                <Request/>
                <Response/>
            </PreFlow>
            <PostFlow name="PostFlow">
                <Request/>
                <Response>
                    <Step>
                        <Name>Response-Cache-1</Name>
                    </Step>
                </Response>
            </PostFlow>
            ...
        

解決策

1 つの ResponseCache ポリシーが、API プロキシのすべてのフローで 1 つのレスポンスパスにのみ添付されるようにします。

上記の例を修正するには、2 つのレスポンスパスのいずれかから ResponseCache ポリシー Response-Cache-1 を削除します。

InvalidMessagePatternForErrorCode

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイに失敗し、次のいずれかのエラー メッセージが表示されます。

    Error Deploying Revision revision_number to environment
    Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.
    

または

    Error Deploying Revision revision_number to environment
    Invalid message pattern found for error code steps.cache.InvalidSkipCachePopulationCondition.
    

エラー メッセージの例

Error Deploying Revision 2 to prod
    Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.
    

または

Error Deploying Revision 2 to prod
    Invalid message pattern found for error code steps.cache.InvalidSkipCachePopulationCondition.
    

エラーのスクリーンショットの例

または

原因

このエラーは、ResponseCache ポリシー内の <SkipCacheLookup> または <SkipCachePopulation> のいずれかの要素に無効な条件が含まれている場合に発生します。

診断

  1. エラーが発生した API プロキシ内のすべての ResponseCache ポリシーを調べ、<SkipCacheLookup> または <SkipCachePopulation> 要素に条件が指定されているポリシーがあるかどうかを確認します。

  2. <SkipCacheLookup> 要素と <SkipCachePopulation> 要素に指定された条件が無効かどうかを確認します。無効である場合、それがエラーの原因です。

    次の例では、等しい値および等しい型であるかどうかを確認するために、<SkipCachePopulation> 要素で無効な JavaScript 演算子 === を使用しています。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
            <DisplayName>Response Cache-1</DisplayName>
            <Properties/>
            <CacheKey>
                <Prefix/>
                <KeyFragment ref="request.uri" type="string"/>
            </CacheKey>
            <Scope>Exclusive</Scope>
            <ExpirySettings>
                <ExpiryDate/>
                <TimeOfDay/>
                <TimeoutInSec ref="">3600</TimeoutInSec>
            </ExpirySettings>
            <CacheLookupTimeoutInSeconds>2</CacheLookupTimeoutInSeconds>
            <SkipCacheLookup>request.header.bypass-cache === "true"</SkipCacheLookup>
        </ResponseCache>
        

    演算子 === が無効なため、エラーが発生します。

    Invalid message pattern found for error code steps.cache.InvalidSkipCacheLookUpCondition.
        

解決策

<SkipCacheLookup> 要素と <SkipCachePopulation> 要素に指定する条件は必ず有効であるようにします。

上記の ResponseCache ポリシーの例を修正するには、= 演算子を使用するように <SkipCacheLookup> を変更します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ResponseCache async="false" continueOnError="false" enabled="true" name="Response-Cache-1">
        <DisplayName>Response Cache-1</DisplayName>
        <Properties/>
        <CacheKey>
            <Prefix/>
            <KeyFragment ref="request.uri" type="string"/>
        </CacheKey>
        <Scope>Exclusive</Scope>
        <ExpirySettings>
            <ExpiryDate/>
            <TimeOfDay/>
            <TimeoutInSec ref="">3600</TimeoutInSec>
        </ExpirySettings>
        <CacheLookupTimeoutInSeconds>2</CacheLookupTimeoutInSeconds>
        <SkipCacheLookup>request.header.bypass-cache = "true"</SkipCacheLookup>
    </ResponseCache>
    

CacheNotFound

エラー メッセージ

Edge UI または Edge 管理 API を使用した API プロキシのデプロイで、次のようなエラー メッセージが表示され、API プロキシのデプロイ ステータスは部分的にデプロイされたものとしてマークされます。

    Error: Cache : cache_resource, not found in organization : organization__environment.
    

エラー メッセージの例

Error Cache : Response-Cache-1, not found in organization : kkalckstein-eval__prod
    

原因

このエラーは、エラー メッセージに記載されている特定のキャッシュが特定の Message Processor コンポーネント上に作成されていない場合に発生します。

解決策

Private Cloud ユーザーの場合は、以下の手順に従ってください。

  1. デプロイ管理 API を実行し、どの Message Processor にエラー steps.cache.CacheNotFound があるかを判別します。

    出力例

    curl -u $USERID:$USERPASSWORD http://<management-server-host>:8080/v1/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/<revision-number>/deployments
        {
          "aPIProxy" : "ResponseCache",
          "environment" : [ {
            "configuration" : {
              "basePath" : "/",
              "configVersion" : "SHA-512:45d3f39783414d3859bf2dec4135d8f5f9960ee6b2d361db2799c82693a8e3f8b95dbbb37c547eb3c0a3819d8ca51727f390502bcaefdf1f113263521a9023b6",
              "steps" : [ ]
            },
            "name" : "prod",
            "server" : [ {
              "pod" : {
                "name" : "pod1",
                "region" : "us-central1"
              },
              "status" : "deployed",
              "type" : [ "message-processor" ],
              "uUID" : "f2e5e34a-5630-43a9-8fef-48a5b9da76d1"
            }, {
              "pod" : {
                "name" : "pod1",
                "region" : "us-central1"
              },
              "status" : "deployed",
              "type" : [ "message-processor" ],
              "uUID" : "879a6538-a5e0-4503-b142-9cb2b4e0623d"
            }, {
            "error" : "Cache : Response-Cache-1, not found in organization : kkalckstein-eval__prod",
            "errorCode" : "steps.cache.CacheNotFound",
            "status" : "error",
            "type" : [ "message-processor" ],
             "uUID" : "a8f9ce0b-c32d-48a9-b26c-9c75d8bf467d"
        },
        ...
            "state" : "deployed"
          } ],
          "name" : "2",
          "organization" : "kkalckstein-eval"
        
  2. エラー steps.cache.CacheNotFound が発生した Message Processor の UUID をメモします。その UUID から、Message Processor のホスト名 / IP アドレスを特定します。

  3. 特定の Message Processor にログインし、次のコマンドを使用して再起動します。

    apigee-service edge-message-processor restart

Public Cloud ユーザーである場合、または Private Cloud で問題が解決しない場合は、Apigee サポートに連絡して支援を求めてください。