Konfigurasi Error Deployment Gagal

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

ini.

Gejala

Deployment proxy API atau revisi Alur Bersama melalui UI Edge atau API pengelolaan gagal dengan error Konfigurasi gagal.

Pesan Error

Anda akan mendapatkan pesan error di UI Edge seperti yang ditunjukkan di bawah ini:

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

Berikut adalah tangkapan layar contoh pesan kesalahan yang diamati di UI Edge:

Kemungkinan Penyebab

Deployment Proxy API dapat gagal dengan pesan "Konfigurasi gagal" {i>error <i}karena berbagai alasan. Tabel di bawah mencantumkan beberapa penyebab yang sering diamati yang menyebabkan kesalahan ini :

Cause Deskripsi Petunjuk Pemecahan Masalah yang Berlaku
Kelas Java Tidak Ada di Kebijakan Javacallout Class Java tidak ada di file JAR yang direferensikan oleh kebijakan JavaInfo. Pengguna Edge Private Cloud
Operand yang salah yang digunakan dalam kondisi di Alur Kondisi Operand/ekspresi yang digunakan di satu atau kedua sisi operator dalam kondisi tidak valid.
Nama Host tidak valid dalam kebijakan Logging Pesan Nama host yang digunakan dalam kebijakan MessageLogging tidak dapat diselesaikan atau mungkin memiliki beberapa karakter khusus yang tidak diinginkan.
Nama KeyValueMap tidak valid KeyValueMap tidak valid atau kosong dalam kebijakan KeyValueMapOperations di Proxy API.

Langkah-Langkah Diagnosis Umum

  1. Dapatkan status deployment untuk revisi tertentu dari Proxy API tempat Anda melihat error deployment menggunakan API di bawah:

    curl -v <management-server-host>:<port#>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. Berikut adalah contoh output dari API di atas;

    "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. Anda akan melihat pesan error "Konfigurasi gagal" di setiap Pemroses Pesan di output status deployment.

  4. Login ke salah satu Pemroses Pesan dan periksa log /opt/apigee/var/log/edge-message-processor/logs/system.log. Melihat apakah terjadi error selama deployment Proxy API.

  5. Bergantung pada error/pengecualian yang diamati di log Pemroses Pesan, Anda harus mengikuti langkah pemecahan masalah dan resolusi yang sesuai untuk masalah tersebut.

  6. Bagian di bawah ini memberikan beberapa pengecualian yang paling sering diamati yang menyebabkan error deployment "Konfigurasi gagal" serta memberikan langkah-langkah untuk memecahkan masalah dan menyelesaikannya.

Penyebab: Tidak Ada Kelas Java di Kebijakan JavaInfo

Diagnosis

  1. Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "Failed to instance the Javacallout Class" selama deployment Proxy API (DeployEvent) seperti yang ditampilkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Operand yang salah yang digunakan dalam kondisi di Alur Kondisi.
  2. Pemroses Pesan menampilkan pengecualian berikut selama deployment 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>
    
  3. Pesan error dalam pengecualian di atas menunjukkan bahwa class JavaInfo com.something.apigee.callout.crypto.main.SecretCallout tidak dapat dibuat instance-nya. Error ini umumnya terjadi jika class tertentu tidak tersedia di file JAR yang ditentukan dalam kebijakan Javacallout atau file JAR dependennya.

  4. Periksa file JAR yang berisi semua class yang terkait dengan paket com.something.apigee.callout.crypto.main dan pastikan class com.something.apigee.callout.crypto.main.SecretCallout tertentu tidak ada.

Resolusi

  1. Tambahkan class yang tidak ada ke file JAR tertentu dan upload file JAR.
  2. Deploy ulang Proxy API.
  3. Dalam contoh di atas, kita menyelesaikan masalah dengan:
    1. Menambahkan class com.something.apigee.callout.crypto.main.SecretCallout yang tidak ada ke file JAR.
    2. Mengupload file JAR yang telah diupdate dan men-deploy ulang Proxy API.

Penyebab: Operand salah yang digunakan dengan operator di Alur Kondisi

Diagnosis

  1. Di log Pemroses Pesan, jika Anda melihat com.apigee.expressions.parser.ParseException selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan dalam contoh pesan di bawah, lanjutkan ke Langkah #2. Jika tidak, lihat penyebab berikutnya Nama Host Tidak Valid dalam kebijakan Logging Pesan.

    Contoh Pesan Error

    com.apigee.expressions.parser.ParseException: Both the operands for EQUALS expression should be data expressions
    
    
  2. Mari lihat contoh untuk memahami cara mendiagnosis masalah ini.

    Contoh : Operand untuk <Operator> seharusnya berupa ekspresi data

  3. Pemroses Pesan menunjukkan pengecualian berikut selama deployment Alur Bersama:

    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. Pesan error dalam ParseException - "Both the operands for EQUALS expression should be data expressions" menunjukkan bahwa kondisi yang melibatkan operator sama dengan (=), tidak sama dengan (!=) atau Statistik dengan operator (=|) memiliki masalah.

  5. Lihat kondisi di semua Alur Kondisi yang melibatkan operator tertentu yang disebutkan dalam pesan error dan lihat apakah ada salah satu masalah berikut:

    1. Ekspresi di kedua sisi operator berjenis sama. Misalnya, jika Anda memiliki variabel string di sisi kiri operator, Anda harus memiliki variabel string atau nilai string lain di sisi kanan.
    2. Variabel yang valid digunakan di antara operator.
    3. Ada spasi di antara operator dan setiap ekspresi.

  6. Jika salah satu kriteria yang disebutkan di atas tidak terpenuhi, Anda akan mendapatkan ParseException - "Both the operands for EQUALS expression should be data expressions".

  7. Perhatikan contoh untuk memahami masalah ini. Berikut ini contoh kondisi error yang

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. Dalam contoh ini, Anda dapat mengamati bahwa tidak ada spasi di antara “atau” operator dan kemudian kondisi berikutnya. Jadi, jika kondisi kedua diuraikan, ekspresi pertama akan diambil sebagai "or(fault.name" untuk operator EQUALS. Ini bukan nama variabel yang valid, sehingga tidak diperlakukan sebagai ekspresi data yang valid. Akibatnya, Anda mendapatkan pengecualian ini:

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

Resolusi

  1. Pastikan Anda selalu memiliki ekspresi data yang tepat di salah satu sisi operator.
  2. Pada contoh yang dibahas di atas, resolusinya adalah untuk memastikan bahwa ada ruang setelah huruf "atau" operator seperti yang dijelaskan dalam cuplikan kode:

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

Nama Host Tidak Valid dalam Kebijakan MessageLogging

Diagnosis

  1. Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "Invalid HostName" selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, lihat penyebab berikutnya Nama KeyValueMap Tidak Valid.

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. Mari kita lihat dua contoh di bawah untuk memahami cara memecahkan dan menyelesaikan masalah ini.

Contoh 1: HostName memiliki karakter khusus yang tidak diinginkan

  1. Pemroses Pesan menampilkan pengecualian berikut selama deployment 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>
    
  2. Pengecualian di atas menunjukkan bahwa penerapan gagal karena "Nama Host Tidak Valid '<nama host>' untuk pengendali Syslog". Hal ini menunjukkan bahwa HostName yang digunakan dalam Kebijakan MessageLogging adalah nama host yang tidak valid.

  3. Memeriksa pengecualian di log Pemroses Pesan menunjukkan dengan cermat ada karakter khusus "/" yang tidak diinginkan di akhir HostName 'splunkprod.myorg.com/'.

  4. Karakter khusus yang tidak diinginkan ini merupakan penyebab error deployment.

Resolusi

  1. Ubah kebijakan MessageLogging untuk menghapus karakter khusus yang tidak diinginkan guna menyelesaikan masalah.
  2. Pada contoh di atas, karakter khusus "/" dihapus dari Kebijakan MessageLogging. Hal ini mengatasi masalah tersebut.

Contoh 2: Nama Host yang Tidak Dapat Diselesaikan

  1. Log Pemroses Pesan memiliki beberapa baris yang menunjukkan peristiwa deployment untuk Proxy API dipicu, yang diikuti dengan pengecualian yang terjadi selama deployment 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> 
    
  2. Pengecualian di atas menunjukkan bahwa penerapan gagal karena "Nama Host Tidak Valid '<nama host>' untuk pengendali Syslog".

  3. Jika Anda membaca baris di atas pengecualian, Anda dapat melihat bahwa Pemroses Pesan tidak dapat me-resolve nama host 'input-prd.cloud.splunk.com' yang disediakan dalam kebijakan MessageLogging.

  4. Untuk mengonfirmasi hal ini, Anda dapat mencoba melakukan telnet ke nama host dan port # yang digunakan dalam kebijakan Logging Pesan.

    1. Periksa kebijakan MessageLogging di revisi Proxy API tertentu dan verifikasi nama host dan port # yang digunakan. Pada contoh di atas, nama Proxy API: myapi, revisi: 42.

      Kebijakan 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>
      
    2. Telnet ke {i>host<i} dengan porta tertentu. Untuk contoh ini, kami mencoba telnet dan mendapatkan error yang sama seperti yang terlihat di log Pemroses Pesan:

      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. Hal ini dengan jelas membuktikan bahwa nama {i>host<i} tidak dapat diselesaikan.

Resolusi

  1. Ubah kebijakan MessageLogging agar menggunakan nama host yang valid.

Jika masalah masih berlanjut, buka Harus Mengumpulkan Informasi Diagnostik.

Penyebab: Nama KeyValueMap Tidak Valid

Diagnosis

  1. Di log Pemroses Pesan, jika Anda melihat pengecualian dengan pesan "KeyValueMap name is invalid" selama deployment Proxy API atau Alur Bersama seperti yang ditampilkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Harus Mengumpulkan Informasi Diagnostik.

    com.apigee.rest.framework.ValidationException: Invalid syslog config: Invalid HostName 'splunkprod.myorg.com/' for Syslog handler
    
  2. Mari kita lihat contoh untuk memahami cara memecahkan dan menyelesaikan masalah ini.

  3. Contoh log Pemroses Pesan menampilkan pengecualian dengan pesan "KeyValueMap name is invalid" yang menyebabkan error selama deployment 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]
    
  4. Pengecualian kedua di atas menunjukkan bahwa terjadi error deployment untuk API Proxy: CustomerAPI, revisi: 1.

  5. Dengan memeriksa stacktrace, Anda dapat melihat bahwa error ditampilkan saat menjalankan kebijakan KeyValuMapOperations.

  6. Saat melihat paket Proxy API, Anda akan menemukan satu kebijakan KeyValuMapOperations yang memiliki kode seperti yang ditampilkan di bawah ini:

    <?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. Seperti yang terlihat di atas, mapIdentifier, yang menunjukkan nama KeyValueMap, memiliki string kosong. Nama KeyValueMap tidak boleh berupa string kosong. Hal ini merupakan penyebab error Deployment.

Resolusi

  1. Ubah kebijakan KeyValueMapOperations agar memiliki nama yang valid dan tepat untuk KeyValueMap.
  2. Pada contoh di atas, kita menyelesaikan masalah dengan mengubah KeyValueMapOperations agar nama KeyValueMap menjadi "MyKeyValueMap" sebagaimana ditunjukkan di bawah ini:

      <?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>
    

Harus Mengumpulkan Informasi Diagnostik

Jika masalah berlanjut bahkan setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut. Hubungi Dukungan Apigee Edge dan berikan informasi yang dikumpulkan kepada mereka.

  1. Output perintah

    curl -v <management-server-host>:<port #>/v1/runtime/organizations/<org-name>/environments/<env-name>/apis/<apiproxy-name>/revisions/deployments -u <user>
    
  2. Log Pemroses Pesan

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    
  3. Detail tentang bagian mana saja dalam Playbook ini yang telah dicoba dan insight lain yang akan membantu kami menyelesaikan masalah ini dengan cepat.