메시지 할당 정책 배포 오류 문제 해결

ApigeeApigee Hybrid 문서입니다.
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

예시 스크린샷

환경 테스트에 대한 배포 오류

원인

메시지 할당 정책의 <Copy> 또는 <Remove> 요소에 지정된 색인이 0이거나 음수이면 API 프록시 배포가 실패합니다.

예를 들어 이름이 같은 쿼리 매개변수를 여러 개 전달하면 색인이 생성된 흐름 변수로 해당 매개변수에 액세스할 수 있습니다. 3명의 학생 ID를 쿼리 매개변수로 전달하려는 경우 다음과 같이 전달할 수 있습니다.

https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3

그런 다음 다음과 같이 메시지 할당 정책에서 색인 번호 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. 오류가 발생한 메시지 할당 정책, 속성 이름, 잘못된 색인을 식별합니다. 오류 메시지에서 이러한 항목을 모두 찾을 수 있습니다. 예를 들어 다음 오류에서 정책 이름은 GeneratingGeocodingRequest, 속성 이름은 id, 색인은 0입니다.

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. 실패한 메시지 할당 정책 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
    

해결 방법

메시지 할당에서 같은 이름을 공유하는 여러 헤더, 쿼리 매개변수 또는 기타 매개변수에 액세스할 때 색인이 항상 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 프록시에서 메시지 할당 정책을 모두 검토합니다. 하위 요소 <Name>이 비어 있거나 <AssignVariable> 요소에서 지정되지 않은 메시지 할당 정책이 있는 경우 오류의 원인이 됩니다.

예시 1: 다음 메시지 할당 정책에 정의된 <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: 다음 메시지 할당 정책에 빈 <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>

해결 방법

메시지 할당 정책의 <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>