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'로 액세스할 수 있습니다. 두 번째 쿼리 매개변수인 'id=2'에 액세스하려면 색인 2, 즉 'id.2'를 사용해야 합니다. 마찬가지로 세 번째 쿼리 매개변수인 'id=3'에 액세스하려면 'id.3'을 사용할 수 있습니다.

자세한 내용은 AssignMessage 정책 복사 요소 문서를 참조하세요.

진단

  1. 오류가 발생한 HTTPDescriptor 정책, 속성 이름, 잘못된 색인을 식별합니다. 오류 메시지에서 이러한 항목을 모두 찾을 수 있습니다. 예를 들어 다음 오류에서 정책 이름은 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 또는 음수인 경우 이는 오류의 원인이 됩니다.

    위에 표시된 메시지 할당 정책 예시에서는 인덱스 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>