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

現在、ApigeeApigee ハイブリッドのドキュメントを表示しています。
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.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

スクリーンショットの例

環境テスト用のデプロイ中のエラー。

原因

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

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

https://$EXTERNAL_IP/$PROXY_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」を使用します。

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

診断

  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="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 または負の数値の場合、それがエラーの原因です。

    上の AssignMessage ポリシーの例では、インデックス 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

エラー メッセージ

Apigee UI または 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.

スクリーン ショットの例

リビジョン 3 の保存エラー。

原因

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

診断

エラーが発生した特定の API プロキシで、すべての Assign Message ポリシーを調べます。子要素 <Name> が空であるか、<AssignVariable> 要素で指定されていない 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 ポリシーの <AssignVariable> 要素内に必ず子要素 <Name> を指定し、空にならないようにします。次に例を示します。

<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>