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

InvalidIndex

エラー メッセージ

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

    Error in deployment for environment [environment]
    The revision is deployed, but traffic cannot flow.
    AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]
    

エラー メッセージの例

Error in deployment for environment test.
    The revision is deployed, but traffic cannot flow.
    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

スクリーンショットの例

原因

Assign Message ポリシーの <Copy> または <Remove> 要素に指定されたインデックスが 0 か負の数の場合、API プロキシのデプロイに失敗します。

たとえば、同じ名前の複数のクエリ パラメータを渡すと、Edge ではインデックス付きのフロー変数として、これらのパラメータにアクセスできます。たとえば、クエリ パラメータとして 3 人の学生の ID を渡す場合、次のようになります。

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3
    

Assign Message ポリシーでインデックス番号 0、1、2 を使用して、これらのクエリ パラメータにアクセスすると、次のようになります。

id.0
    id.1 and
    id.2
    

この場合、インデックスが 1 から開始していないため、プロキシのデプロイに失敗します。最初のクエリ パラメータ "id=1" を "id.1" とするとアクセスできます。2 番目のクエリ パラメータ "id=2" にアクセスするには、インデクス番号 2("id.2")を使用します。同様に、3 番目のクエリ パラメータ "id=3" にアクセスするには、"id.3" を使用します。

詳細については、こちらをご覧ください。

診断

  1. エラーが発生した Assign Message ポリシーと属性名、無効なインデックスを特定します。これらはすべてエラー メッセージで確認できます。たとえば、エラー メッセージの場合、GeneratingGeocodingRequest がポリシー名、id が属性名、0 がインデックスです。

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
        
  2. エラーが発生した Assign Message ポリシーの XML で使用されている属性名とインデックスが、エラー メッセージ(上の手順 1)にある属性名とインデックスに一致しているかどうか確認します。たとえば、次のポリシーでは属性 id とインデックス 0 が指定されていますが、これらはエラー メッセージの内容と一致します。

        <AssignMessage name="GenerateStudentsReq>uest&qu<ot;
          AssignTo createNew="true&>quot; type="re<quest&quo>t;Stude<ntsInfoRequest/Assign>To
          Co<py source=&>quot;request&qu<ot;
              QueryParams
        >          Query<Param name="school>_name"/
      <            QueryParam >name="id.0<"/
                  Q>ueryParam n<ame="id>.1"<;/
      >     <       QueryPa>ram name="id.2"/
              /QueryParams
          /Copy
        /AssignMessage
        
  3. 指定されたインデックスが 0 または負の数の場合、これがエラーの原因です。

    上の Assign Message ポリシーの例では、インデックス 0 を使用してクエリ パラメータ "id" の最初の値にアクセスしようとしています。このため、API プロキシのデプロイが失敗し、次のエラーが返されます。

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
        

解決策

Assign Message ポリシーで複数のヘッダー、クエリ パラメータまたは同じ名前を共有するパラメータにアクセスする場合は、常に 0 より大きいインデックスを指定します。例:

<AssignMessage name="GenerateStudentsReq>uest"<;
        AssignTo createNew="true&>quot; type="re<quest&quo>t;Student<sInfoRequest/AssignTo>
        Copy< source=&qu>ot;request"
<            QueryParams
      >          QueryPa<ram name="school_n>ame"/
      <          QueryParam na>me="id.1&quo<t;/
                Que>ryParam name=<"id.2&q>uot;/
   <     >     <   QueryParam >name="id.3"/
            /QueryParams
        /Copy
    /AssignMessage
    

InvalidVariableName

エラー メッセージ

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

    Error Saving Revision [revision_number]
    The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.
    

エラー メッセージの例

Error Saving Revision 3
    AssignMessage schema validation failed: invalid variable name - null - in assign variable.
    

スクリーンショットの例

原因

<AssignVariable> 要素の子要素 <Name> が空か、指定されていない場合、値を割り当てる有効な変数名が存在しないため、API プロキシのデプロイに失敗します。有効な変数名が必要です。

診断

特定の API プロキシで、エラーが発生した Assign Message ポリシーをすべて調べます。<AssignVariable> 要素の子要素 <Name> が空か、指定されていない Assign Message ポリシーが存在する場合、これがエラーの原因です。

例 1: 次の Assign Message ポリシーに <Name> 要素が定義されていない。

<AssignMessage async="false" continueOnError="false" enabled="true>" na<me="As>sign-Message-1&q<uot;
       > DisplayN<ameAssign M>essage-1/<DisplayName
  >      Propert<ies/
>        <Assign>Variable
<            Val>ueabcd123<4/Value
        /AssignVa>riabl<e
        IgnoreUnresolved>Variables<false/IgnoreUnresolvedVariables
        AssignTo createNe>w="true&<quot; tra>nspor<t="http&q>uot; type="request"googleBookReq/AssignTo
    /AssignMessage
    

例 2: 次の Assign Message ポリシーの <Name> 要素が空になっている。

<AssignMessage async="false" continueOnError="false" enabled="true>" na<me="As>sign-Message-1&q<uot;
       > DisplayN<ameAssign M>essage-1/<DisplayName
  >      Propert<ies/><
    >    AssignVar<iable>
       <     N>ame/Name
<            Val>ueabcd123<4/Value
        /AssignVa>riabl<e
        IgnoreUnresolved>Variables<false/IgnoreUnresolvedVariables
        AssignTo createNe>w="true&<quot; tra>nspor<t="http&q>uot; type="request"googleBookReq/AssignTo
    /AssignMessage
    

解決策

Assign Message ポリシーで子要素 <Name> を常に指定し、<AssignVariable> 要素に空でない値を指定します。例:

    <AssignMessage async="false" continueOnError="false" enabled="true>" na<me="As>sign-Message-1&q<uot;
       > DisplayN<ameAssign M>essage-1/Disp<layName
      >  Properties/<
   >         <Assig>nVariable
   <     >    Name<appSec>ret/Name
<            Val>ueabcd123<4/Value
        /AssignVa>riabl<e
        IgnoreUnresolved>Variables<false/IgnoreUnresolvedVariables
        AssignTo createNe>w="true&<quot; tra>nspor<t="http&q>uot; type="request"googleBookReq/AssignTo
    /AssignMessage