Ошибка развертывания. Не удалось настроить конфигурацию.

Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee
X.info

Симптом

Развертывание изменений API-прокси или Shared Flow через пользовательский интерфейс Edge или API управления завершается ошибкой "Configuration failed ".

Сообщение об ошибке

В пользовательском интерфейсе Edge появится сообщение об ошибке, как показано ниже:

The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}

Вот скриншот примера сообщения об ошибке, наблюдаемого в пользовательском интерфейсе Edge:

Возможные причины

Развертывание API-прокси может завершиться ошибкой «Configuration failed» по множеству различных причин. В таблице ниже перечислены некоторые часто встречающиеся причины, приводящие к этой ошибке:

Причина Описание Инструкции по устранению неполадок, применимые для
Отсутствует Java-класс в политике JavaCallout. В JAR-файле, на который ссылается политика JavaCallout, отсутствует Java-класс. Пользователи частного облака Edge
В условиях выполнения алгоритма обработки условий используются некорректные операнды. Операнды/выражения, используемые с одной или обеих сторон операторов в условиях, недействительны.
Недопустимое имя хоста в политике регистрации сообщений. Имя хоста, используемое в политике MessageLogging, не может быть разрешено или может содержать нежелательные специальные символы.
Недопустимое имя KeyValueMap В политике KeyValueMapOperations в API-прокси значение KeyValueMap недействительно или пусто.

Общие этапы диагностики

  1. Получите статус развертывания для конкретной версии API-прокси, для которой вы наблюдаете ошибку развертывания, используя указанный ниже API:

    curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. Вот пример выходных данных, полученных с помощью указанного выше API;

    "server" : [ { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0a20926c-f4bf-401b-af84-05fd84b9f492" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "f2ee6ab4-a108-4465-a7ba-b56530d8e3fc" 
    }, { 
    "error" : "com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}", 
    "status" : "error", 
    "type" : [ "message-processor" ], 
    "uUID" : "0f41991e-b310-4e77-aac5-5fdb150ef9f6" 
    },
    
  3. В выходных данных о состоянии развертывания в каждом из обработчиков сообщений вы увидите сообщение об ошибке «Сбой конфигурации» .

  4. Войдите в один из обработчиков сообщений и проверьте журнал /opt/apigee/var/log/edge-message-processor/logs/system.log . Убедитесь, что нет ошибок, возникших во время развертывания API-прокси.

  5. В зависимости от ошибки/исключения, обнаруженного в журнале обработчика сообщений, необходимо выполнить соответствующие действия по устранению неполадок и решению проблемы.

  6. В разделах ниже описаны некоторые из наиболее часто встречающихся исключений, приводящих к ошибке развертывания « Сбой конфигурации» , а также приведены шаги по устранению и исправлению этих ошибок.

Причина: Отсутствует Java-класс в политике JavaCallout.

Диагноз

  1. In the Message Processor logs, if you see any exception with the message "Failed to instantiate the JavaCallout Class" during the deployment of an API Proxy (DeployEvent) as shown below, then proceed to Step #2. If not, go to Incorrect operands used in conditions in the Condition Flow .
  2. В процессе развертывания API-прокси обработчик сообщений выдает следующее исключение:

    2017-10-10 05:02:42,330 Apigee-Main-5 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='oauth2', applicationRevision='14', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class com.something.apigee.callout.crypto.main.SecretCallout 
    at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:89) ~[javacallout-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:230) ~[message-processor-1.0.0.jar:na] 
    
    <snipped>
    
  3. The error message in the above exception indicates that the JavaCallout class com.something.apigee.callout.crypto.main.SecretCallout could not be instantiated. This error generally occurs when the specific class is not available in the JAR file specified in the JavaCallout policy or any of its dependent JAR files.

  4. Check the JAR file that contained all the classes pertaining to the package com.something.apigee.callout.crypto.main and confirm that the specific class com.something.apigee.callout.crypto.main.SecretCallout was missing.

Разрешение

  1. Добавьте недостающий класс в соответствующий JAR-файл и загрузите этот JAR-файл.
  2. Повторно разверните API-прокси.
  3. В приведенном выше примере мы решили проблему следующим образом:
    1. Добавление отсутствующего класса com.something.apigee.callout.crypto.main.SecretCallout в JAR-файл.
    2. Загрузка обновлённого JAR-файла и повторное развертывание API-прокси.

Причина: Неправильные операнды, использованные с операторами в потоке условий.

Диагноз

  1. В журналах обработчика сообщений, если вы видите исключение com.apigee.expressions.parser.ParseException это означает, что в них может отображаться ошибка. com.apigee.expressions.parser.ParseException Если при развертывании API-прокси или общего потока, как показано в приведенных ниже примерах сообщений, перейдите к шагу № 2. В противном случае перейдите к следующей причине: Недопустимое имя хоста в политике ведения журнала сообщений .

    Пример сообщения об ошибке

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    
  2. Давайте рассмотрим пример, чтобы понять, как диагностировать эту проблему.

    Пример: Операндами для выражения <Оператор> должны быть выражения данных.

  3. В процессе развертывания общего потока сообщений обработчик сообщений выдает следующее исключение:

    2017-11-23 09:11:04,498  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.loadXMLConfigurations() : Unable to Load default for path /organizations/myorg/apiproxies/Introspection/revisions/12/sharedflows/default
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  sync error for Introspection and revision 12
    2017-11-23 09:11:04,499  Apigee-Main-6 ERROR MESSAGING.RUNTIME - Application.sync() :  Actual Error
    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
        at com.apigee.expressions.parser.ExpressionParser.buildExpressionTree(ExpressionParser.java:337) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parse(ExpressionParser.java:24) ~[expressions-1.0.0.jar:na]
        at com.apigee.expressions.parser.ExpressionParser.parseLogicExpression(ExpressionParser.java:28) ~[expressions-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.getExpression(Step.java:67) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.Step.handleAdd(Step.java:58) ~[message-processor-1.0.0.jar:na]
        at com.apigee.messaging.runtime.SharedFlowRuntime.addStep(SharedFlowRuntime.java:81) ~[message-processor-1.0.0.jar:na]  <snipped>
    
  4. The error message in the ParseException - " Both the operands for EQUALS expression should be data expressions " indicates that a condition involving equal to (=), not equal to (!=) or Stats with (=|) operator has an issue.

  5. Просмотрите условия во всех потоках условий, включающих конкретного оператора, упомянутого в сообщении об ошибке, и проверьте, нет ли каких-либо из следующих проблем:

    1. The expressions on either side of the operator are of same type. For example, if you have a string variable on the left side of the operator, then you need to have another string variable or string value on the right side.
    2. Между операторами используются допустимые переменные.
    3. Между оператором и каждым из выражений стоит пробел.

  6. Если хотя бы один из вышеупомянутых критериев не выполняется, возникает исключение ParseException — " Both the operands for EQUALS expression should be data expressions ".

  7. Давайте рассмотрим пример, чтобы понять эту проблему. Вот пример ошибки, которая...

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. In this example, you can observe that there's no space between the "or" operator and then next condition. So when the second condition is being parsed, the first expression is taken as "or(fault.name" for the EQUALS operator. This is not a valid variable name, so it is not treated as a valid data expression. As a consequence you get this exception:

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    

Разрешение

  1. Убедитесь, что по обе стороны от операторов всегда используются корректные выражения данных.
  2. В приведенном выше примере решение заключалось в том, чтобы обеспечить наличие пробела после оператора «или», как описано в фрагменте кода:

    <Condition>
               (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved")
    </Condition>
    
    

Недопустимое имя хоста в политике регистрации сообщений.

Диагноз

  1. In the Message Processor logs, if you see any exception with the message "Invalid HostName" during the deployment of API Proxy or Shared Flow as shown below, then proceed to Step #2. If not, go to next cause Invalid KeyValueMap Name .

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. Рассмотрим два примера ниже, чтобы понять, как устранять и решать эту проблему.

Пример 1: Имя хоста содержит нежелательный специальный символ.

  1. В процессе развертывания API-прокси обработчик сообщений выдает следующее исключение:

      2018-01-20 02:12:13,535 Apigee-Main-3 ERROR MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : error configuring config events [DeployEvent{organization='myorg', application='providersearch', applicationRevision='4', deploymentSpec=basepath=/;env=prod;, deploymentID=null}] 
      com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler 
      at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
      at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na]
      at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
      ...<snipped>
    
  2. The exception above shows that deployment is failing due to "Invalid HostName '<hostname>' for Syslog handler" . This indicates that the HostName used in the MessageLogging Policy is an invalid hostname.

  3. Внимательное изучение исключения в журнале обработчика сообщений показывает, что в конце имени хоста 'splunkprod.myorg.com/'.

  4. Этот нежелательный специальный символ стал причиной ошибки при развертывании.

Разрешение

  1. Для решения проблемы измените политику MessageLogging, удалив все нежелательные специальные символы.
  2. В приведенном выше примере специальный символ "/" был удален из политики регистрации сообщений. Это решило проблему.

Пример 2: Неразрешимое имя хоста

  1. В журнале обработчика сообщений было несколько строк, указывающих на то, что сработало событие развертывания API-прокси, за которым последовало исключение, возникшее во время развертывания API-прокси:

    2017-12-22 00:13:49,057 Apigee-Main-87446 INFO MESSAGING.CONFIGURATION - MessageProcessorServiceImpl.configure() : configuring [DeployEvent{organization='myorg', application='myapi', applicationRevision='42', deploymentSpec=basepath=/;env=dev;, deploymentID=null}] 
    
    2017-12-22 00:13:49,318 Apigee-Main-87446 ERROR c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.refresh() : Unable to resolve host : input-prd.cloud.splunk.com: Name or service not known 
    
    2017-12-22 00:13:49,323 Apigee-Main-87446 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {} 
    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'input-prd.cloud.splunk.com' for Syslog handler 
    at com.apigee.messaging.runtime.destinations.SyslogDestination.<init>(SyslogDestination.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.SysLoggerFactory.getInstance(SysLoggerFactory.java:39) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.messaging.runtime.destinations.DestinationRegistry.newDestination(DestinationRegistry.java:44) ~[message-processor-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.populateDestinations(MessageLoggingStepDefinition.java:118) ~[message-logging-1.0.0.jar:na] 
    at com.apigee.steps.messagelogging.MessageLoggingStepDefinition.handleAdd(MessageLoggingStepDefinition.java:99) ~[message-logging-1.0.0.jar:na] 
    
    <snipped> 
    
  2. Приведенное выше исключение указывает на то, что развертывание завершается с ошибкой "Недопустимое имя хоста '<hostname>' для обработчика Syslog" .

  3. If you read through the line above the exception, you can notice that the Message Processor is unable to resolve the hostname 'input-prd.cloud.splunk.com' provided in the MessageLogging policy.

  4. Для подтверждения этого вы можете попробовать подключиться через Telnet к имени хоста и номеру порта, указанным в политике регистрации сообщений.

    1. Проверьте политику MessageLogging в конкретной версии API-прокси и убедитесь в правильности используемого имени хоста и номера порта. В приведенном выше примере имя API-прокси: myapi, версия: 42.

      Политика ведения журнала сообщений

        <MessageLogging async="false" continueOnError="false" enabled="true" name="Log-To-Splunk">
            <DisplayName>Log-To-Splunk</DisplayName>
            <Syslog>
                <Message>Message.id = {request.header.id}</Message>
                <Host>input-prd.cloud.splunk.com</Host>
                <Port>2900</Port>
                <Protocol>TCP</Protocol>
                <SSLInfo>
                    <Enabled>true</Enabled>
                </SSLInfo>
            </Syslog>
        </MessageLogging>
      
    2. Подключитесь к хосту через Telnet, используя указанный порт. В этом примере мы попробовали использовать Telnet и получили ту же ошибку, что и в журнале обработчика сообщений:

      telnet input-prd.cloud.splunk.com 2900 
      telnet: input-prd.cloud.splunk.com: Name or service not known 
      input-prd.cloud.splunk.com: Host name lookup failure
      
  5. Это ясно доказало, что имя хоста не может быть разрешено.

Разрешение

  1. Измените политику MessageLogging, чтобы она использовала допустимое имя хоста.

Если проблема сохраняется, перейдите к разделу «Необходимо собрать диагностическую информацию» .

Причина: Недопустимое имя KeyValueMap.

Диагноз

  1. In the Message Processor logs, if you see an exception with the message "KeyValueMap name is invalid" during the deployment of an API Proxy or Shared Flow as shown below, then proceed to Step #2. If not, go to Must Gather Diagnostic Information .

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. Давайте рассмотрим пример, чтобы понять, как устранять и решать эту проблему.

  3. Пример журнала обработчика сообщений , демонстрирующий исключение с сообщением "Недопустимое имя KeyValueMap", приводящее к ошибке при развертывании API-прокси.

    2018-02-27 14:14:50,318  Apigee-Main-6 ERROR MESSAGING.RUNTIME - AbstractConfigurator.handleUpdate() : Fatal error deploying proxy: {}
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) [config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) [message-processor-1.0.0.jar:na]
    
    2018-02-27 14:14:50,344  Apigee-Main-6 ERROR BOOTSTRAP - RuntimeConfigurationServiceImpl.dispatchToListeners() : RuntimeConfigurationServiceImpl.dispatchToListeners : Error occurred while dispatching the request DeployEvent{organization='myorg', application='CustomerAPI', applicationRevision='1', deploymentSpec=basepath=/;env=test;, deploymentID=null} to com.apigee.application.bootstrap.listeners.MessageProcessorBootstrapListener@5009d06e
    com.apigee.keyvaluemap.KeyValueMapApiException: KeyValueMap name  is invalid
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.validateMapName(KeyValueMapServiceImpl.java:125) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.keyvaluemap.service.legacy.KeyValueMapServiceImpl.createOrUpdateKeyValueMap(KeyValueMapServiceImpl.java:185) ~[keyvaluemap-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.digest(KeyValueMapOperationsStepDefinition.java:180) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.steps.keyvaluemapoperations.KeyValueMapOperationsStepDefinition.handleAdd(KeyValueMapOperationsStepDefinition.java:197) ~[keyvaluemap-operations-1.0.0.jar:na]
            at com.apigee.entities.AbstractConfigurator.handleUpdate(AbstractConfigurator.java:130) ~[config-entities-1.0.0.jar:na]
            at com.apigee.messaging.runtime.Application.handleUpdate(Application.java:229) ~[message-processor-1.0.0.jar:na]
    
  4. Второе исключение, указанное выше, свидетельствует о том, что ошибка развертывания произошла для API-прокси: CustomerAPI, версия: 1.

  5. Проверив трассировку стека, можно заметить, что ошибка возникает при выполнении политики KeyValuMapOperations.

  6. Изучив пакет API Proxy, вы обнаружите одну политику KeyValuMapOperations, содержащую код, показанный ниже:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="">
     <DisplayName>Pulling Keys</DisplayName>
     <Properties/>
     <ExclusiveCache>false</ExclusiveCache>
    
    
  7. Как видно выше, mapIdentifier , указывающий имя KeyValueMap, содержит пустую строку. Имя KeyValueMap не может быть пустой строкой. Это и стало причиной ошибки развертывания.

Разрешение

  1. Измените политику KeyValueMapOperations, чтобы присвоить KeyValueMap корректное допустимое имя.
  2. В приведенном выше примере мы решили проблему, изменив KeyValueMapOperations и присвоив KeyValueMap имя "MyKeyValueMap", как показано ниже:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Pulling-Keys" mapIdentifier="MyKeyValueMap">
        <DisplayName>Pulling Keys</DisplayName>
        <Properties/>
        <ExclusiveCache>false</ExclusiveCache>
    

Необходимо собрать диагностическую информацию.

If the problem persists even after following the above instructions, please gather the following diagnostic information. Contact Apigee Edge Support and provide them with the gathered information.

  1. Вывод команды

    curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. Журналы обработчика сообщений

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    
  3. Подробная информация о том, какие разделы этого руководства были опробованы, а также любые другие сведения, которые помогут нам ускорить решение этой проблемы.