Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
Il deployment delle revisioni del proxy API o del flusso condiviso tramite l'interfaccia utente Edge o l'API di gestione non riesce e viene visualizzato l'errore Configuration failed.
Messaggio di errore
Nell'interfaccia utente Edge viene visualizzato un messaggio di errore come mostrato di seguito:
The revision is deployed, but traffic cannot flow.
com.apigee.kernel.exceptions.spi.UncheckedException{ code = application.bootstrap.FailedToConfigure, message = Configuration failed, associated contexts = []}
Ecco lo screenshot di un messaggio di errore di esempio osservato nell'interfaccia utente Edge:

Possibili cause
Il deployment di un proxy API può non riuscire e viene visualizzato l'errore "Configuration failed" per diversi motivi. La tabella seguente elenca alcune cause osservate di frequente che generano questo errore :
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
| Classe Java mancante nella policy JavaCallout | Manca una classe Java nel file JAR a cui fa riferimento la policy JavaCallout. | Utenti di Edge Private Cloud |
| Operandi errati utilizzati nelle condizioni nel flusso di condizioni | Gli operandi/le espressioni utilizzati su uno o entrambi i lati degli operatori nelle condizioni non sono validi. | |
| Nome host non valido nella policy Message Logging | Il nome host utilizzato nella policy MessageLogging non può essere risolto o potrebbe contenere alcuni caratteri speciali indesiderati. | |
| Nome KeyValueMap non valido | KeyValueMap non è valido o è vuoto nella policy KeyValueMapOperations nel proxy API. |
Passaggi di diagnostica comuni
Recupera lo stato dei deployment per la revisione specifica del proxy API per cui stai osservando l'errore di deployment utilizzando l'API riportata di seguito:
curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Ecco un output di esempio dell'API riportata sopra:
"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" },Viene visualizzato il messaggio di errore "Configuration failed" in ognuno dei processori di messaggi nell'output dello stato del deployment.
Accedi a uno dei processori di messaggi e controlla il log
/opt/apigee/var/log/edge-message-processor/logs/system.log. Verifica se si sono verificati errori durante il deployment del proxy API.A seconda dell'errore/dell'eccezione osservata nel log del processore di messaggi, devi seguire i passaggi di risoluzione dei problemi e la risoluzione appropriati per il problema.
Le sezioni seguenti forniscono alcune delle eccezioni osservate più di frequente che generano l'errore di deployment "Configuration failed" e forniscono i passaggi per risolvere i problemi e risolverli.
Causa: classe Java mancante nella policy JavaCallout
Diagnosi
- Nei log del processore di messaggi, se vedi un'eccezione con il messaggio "Failed to instantiate the JavaCallout Class" durante il deployment di un proxy API (DeployEvent) come mostrato di seguito, procedi al passaggio 2. In caso contrario, vai a Operandi errati utilizzati nelle condizioni nel flusso di condizioni.
Il processore di messaggi mostra la seguente eccezione durante il deployment del proxy 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>Il messaggio di errore nell'eccezione riportata sopra indica che non è stato possibile creare un'istanza della classe JavaCallout
com.something.apigee.callout.crypto.main.SecretCallout. Questo errore si verifica in genere quando la classe specifica non è disponibile nel file JAR specificato nella policy JavaCallout o in uno dei relativi file JAR dipendenti.Controlla il file JAR che conteneva tutte le classi relative al pacchetto
com.something.apigee.callout.crypto.maine verifica che la classe specificacom.something.apigee.callout.crypto.main.SecretCalloutnon sia presente.
Risoluzione
- Aggiungi la classe mancante al file JAR specifico e carica il file JAR.
- Esegui di nuovo il deployment del proxy API.
- Nell'esempio riportato sopra, abbiamo risolto il problema:
- Aggiungendo la classe mancante
com.something.apigee.callout.crypto.main.SecretCalloutal file JAR. - Caricando il file JAR aggiornato ed eseguendo di nuovo il deployment del proxy API.
- Aggiungendo la classe mancante
Causa: operandi errati utilizzati con gli operatori nel flusso di condizioni
Diagnosi
Nei log del processore di messaggi, se vedi un
com.apigee.expressions.parser.ParseExceptiondurante il deployment di un proxy API o di un flusso condiviso come mostrato nei messaggi di esempio riportati di seguito, procedi al passaggio 2. In caso contrario, vai alla causa successiva Nome host non valido nella policy Message Logging.Messaggio di errore di esempio
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressionsVediamo un esempio per capire come diagnosticare questo problema.
Esempio : gli operandi per l'espressione <Operator> devono essere espressioni di dati
Il processore di messaggi mostra la seguente eccezione durante il deployment di un flusso condiviso:
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>Il messaggio di errore in ParseException - "
Both the operands for EQUALS expression should be data expressions" indica che si è verificato un problema con una condizione che coinvolge l'operatore uguale a (=), diverso da (!=) o Stats with (=|).Esamina le condizioni in tutti i flussi di condizioni che coinvolgono l'operatore specifico menzionato nel messaggio di errore e verifica se si sono verificati i seguenti problemi:
- Le espressioni su entrambi i lati dell'operatore sono dello stesso tipo. Ad esempio, se hai una variabile stringa sul lato sinistro dell'operatore, devi avere un'altra variabile stringa o un valore stringa sul lato destro.
- Tra gli operatori vengono utilizzate variabili valide.
- È presente uno spazio tra l'operatore e ciascuna delle espressioni.
Se uno dei criteri sopra menzionati non viene soddisfatto, viene visualizzato ParseException - "
Both the operands for EQUALS expression should be data expressions".Vediamo un esempio per capire questo problema. Ecco una condizione di errore di esempio
<Condition> (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved") </Condition>In questo esempio, puoi notare che non c'è spazio tra l'operatore "or" e la condizione successiva. Pertanto, quando viene analizzata la seconda condizione, la prima espressione viene considerata "or(fault.name" per l'operatore EQUALS. Questo non è un nome di variabile valido, quindi non viene trattato come un'espressione di dati valida. Di conseguenza, viene visualizzata questa eccezione:
com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
Risoluzione
- Assicurati di avere sempre espressioni di dati corrette su entrambi i lati degli operatori.
Nell'esempio discusso sopra, la risoluzione consisteva nell'assicurarsi che ci fosse uno spazio dopo l'operatore "or", come descritto nello snippet di codice:
<Condition> (fault.name = "invalid_access_token") or (fault.name = "ApiKeyNotApproved") </Condition>
Nome host non valido nella policy MessageLogging
Diagnosi
Nei log del processore di messaggi, se vedi un'eccezione con il messaggio "Invalid HostName" durante il deployment del proxy API o del flusso condiviso come mostrato di seguito, procedi al passaggio 2. In caso contrario, vai alla causa successiva Nome KeyValueMap non valido.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerEsaminiamo i due esempi riportati di seguito per capire come risolvere questo problema.
Esempio 1: nome host con caratteri speciali indesiderati
Il processore di messaggi mostra la seguente eccezione durante il deployment del proxy 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>L'eccezione riportata sopra mostra che il deployment non riesce a causa di "Invalid HostName '<hostname>' for Syslog handler". Ciò indica che il nome host utilizzato nella policy MessageLogging non è valido.
L'esame attento dell'eccezione nel log del processore di messaggi mostra che alla fine del nome host
'splunkprod.myorg.com/'.è presente un carattere speciale indesiderato "/".Questo carattere speciale indesiderato è stato la causa dell'errore di deployment.
Risoluzione
- Modifica la policy MessageLogging per rimuovere eventuali caratteri speciali indesiderati per risolvere il problema.
- Nell'esempio riportato sopra, il carattere speciale "/" è stato rimosso dalla policy MessageLogging. Il problema è stato risolto.
Esempio 2: nome host non risolvibile
Il log del processore di messaggi conteneva alcune righe che mostrano che viene attivato l'evento di deployment per un proxy API, seguito da un'eccezione che si verifica durante il deployment del proxy 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>L'eccezione riportata sopra mostra che il deployment non riesce a causa di "Invalid HostName '<hostname>' for Syslog handler".
Se leggi la riga sopra l'eccezione, puoi notare che il processore di messaggi non è in grado di risolvere il nome host
'input-prd.cloud.splunk.com'fornito nella policy MessageLogging.Per confermare, puoi provare a eseguire telnet sul nome host e sul numero di porta utilizzati nella policy Message Logging.
Controlla la policy MessageLogging nella revisione specifica del proxy API e verifica il nome host e il numero di porta utilizzati. Nell'esempio riportato sopra, il nome del proxy API è myapi e la revisione è 42.
Policy MessageLogging
<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>Esegui telnet sull'host con una porta specifica. Per questo esempio, abbiamo provato telnet e abbiamo ricevuto lo stesso errore visualizzato nel log del processore di messaggi:
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
Questo ha dimostrato chiaramente che il nome host non può essere risolto.
Risoluzione
- Modifica la policy MessageLogging in modo da utilizzare il nome host valido.
Se il problema persiste, vai a Raccogliere informazioni di diagnostica.
Causa: nome KeyValueMap non valido
Diagnosi
Nei log del processore di messaggi, se vedi un'eccezione con il messaggio "KeyValueMap name is invalid" durante il deployment di un proxy API o di un flusso condiviso come mostrato di seguito, procedi al passaggio 2. In caso contrario, vai a Raccogliere informazioni di diagnostica.
com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handlerVediamo un esempio per capire come risolvere questo problema.
Log del processore di messaggi di esempio che mostra l'eccezione con il messaggio "KeyValueMap name is invalid" che genera un errore durante il deployment del proxy 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]La seconda eccezione riportata sopra indica che si è verificato un errore di deployment per proxy API: CustomerAPI, revisione: 1.
Controllando lo stacktrace, puoi notare che viene generato un errore durante l'esecuzione della policy KeyValuMapOperations.
Esaminando il bundle del proxy API, scopri che esiste una policy KeyValuMapOperations con il codice mostrato di seguito:
<?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>Come mostrato sopra, mapIdentifier, che indica il nome di KeyValueMap, ha una stringa vuota. Il nome KeyValueMap non può essere una stringa vuota. Questa è stata la causa dell'errore di deployment.
Risoluzione
- Modifica la policy KeyValueMapOperations in modo che abbia un nome valido per KeyValueMap.
Nell'esempio riportato sopra, abbiamo risolto il problema modificando KeyValueMapOperations in modo che il nome KeyValueMap sia "MyKeyValueMap", come mostrato di seguito:
<?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>
Raccogliere informazioni di diagnostica
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica. Contatta l'assistenza Apigee Edge e fornisci le informazioni raccolte.
Output del comando
curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>Log del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.logDettagli sulle sezioni di questa guida che sono state provate e su eventuali altre informazioni che ci aiuteranno ad accelerare la risoluzione di questo problema.