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

Apigee X のドキュメントが表示されています。
Apigee Edge のドキュメントを表示する。

InvalidIndex

エラー メッセージ

Apigee UI または 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.
HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0

原因

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

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

https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3

HTTPModifier ポリシーでインデックス番号 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」を使用します。

詳しくは、AssignMessage ポリシーの Copy 要素についてのドキュメントをご覧ください。

診断

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

    HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. エラーが発生した HTTPModifier ポリシー XML で使用されている属性名とインデックスが、エラー メッセージ(上のステップ 1)で特定した属性名とインデックスと一致していることを確認します。たとえば、次のポリシーでは属性を id、インデックスを 0 として指定しており、これはエラー メッセージの内容と一致します。

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
    
  3. 指定されたインデックスが 0 または負の数値の場合、それがエラーの原因です。

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

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

解決策

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

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>