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

解決策

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>