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 要素についてのドキュメントをご覧ください。
診断
エラーが発生した HTTPModifier ポリシー、属性名、無効なインデックスを特定します。これらの項目はすべてエラー メッセージで確認できます。たとえば、次のエラーでは、ポリシー名は
GeneratingGeocodingRequest
、属性名はid
、インデックスは0
です。HTTPModifier[GenerateStudentsRequest]: index must be greater than zero in id.0
エラーが発生した 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>
指定されたインデックスが 0 または負の数値の場合、それがエラーの原因です。
上の AssignMessage ポリシーの例では、インデックス 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>