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" を使用します。
詳細については、こちらをご覧ください。
診断
エラーが発生した Assign Message ポリシーと属性名、無効なインデックスを特定します。これらはすべてエラー メッセージで確認できます。たとえば、エラー メッセージの場合、
GeneratingGeocodingRequest
がポリシー名、id
が属性名、0
がインデックスです。AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
エラーが発生した Assign Message ポリシーの 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 または負の数の場合、これがエラーの原因です。
上の Assign Message ポリシーの例では、インデックス 0 を使用してクエリ パラメータ "id" の最初の値にアクセスしようとしています。このため、API プロキシのデプロイが失敗し、次のエラーが返されます。
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
解決策
Assign Message ポリシーで複数のヘッダー、クエリ パラメータまたは同じ名前を共有するパラメータにアクセスする場合は、常に 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>
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" name="Assign-Message-1">
<DisplayName>Assign Message-1</DisplayName>
<Properties/>
<AssignVariable>
<Value>abcd1234</Value>
</AssignVariable>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
例 2: 次の Assign Message ポリシーの <Name>
要素が空になっている。
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>Assign Message-1</DisplayName>
<Properties/>
<AssignVariable>
<Name></Name>
<Value>abcd1234</Value>
</AssignVariable>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
解決策
Assign Message ポリシーで子要素 <Name>
を常に指定し、<AssignVariable>
要素に空でない値を指定します。例:
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>appSecret</Name> <Value>abcd1234</Value> </AssignVariable> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>