Konfigurasi Error Deployment Gagal

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

Gejala

Deployment proxy API atau revisi Alur Bersama melalui UI Edge atau Management API 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 screenshot contoh pesan error yang diamati di UI Edge:

Kemungkinan Penyebab

Deployment Proxy API dapat gagal dan disertai error "Konfigurasi gagal" karena berbagai alasan. Tabel di bawah mencantumkan beberapa penyebab yang sering diamati yang menyebabkan error ini :

Cause Deskripsi Petunjuk Pemecahan Masalah Berlaku Untuk
Class Java Tidak Ada dalam Kebijakan JavaCallout Class Java tidak ada di file JAR yang direferensikan oleh kebijakan JavaCallout. Pengguna Edge Private Cloud
Operand yang salah digunakan dalam kondisi di Alur Kondisi Operand/ekspresi yang digunakan di satu atau kedua sisi operator dalam kondisi tidak valid.
Nama host dalam kebijakan Logging Pesan tidak valid 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 Diagnosis Umum

  1. Dapatkan status deployment untuk revisi spesifik Proxy API yang error deployment-nya Anda amati menggunakan API di bawah ini:

    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 "Configuration failed" di setiap Message Processors dalam output status deployment.

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

  5. Bergantung pada error/pengecualian yang diamati di log Message Processor, Anda perlu mengikuti langkah pemecahan masalah dan penyelesaian masalah yang sesuai.

  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 mengatasinya.

Penyebab: Class Java Tidak Ada dalam Kebijakan JavaCallout

Diagnosis

  1. Di log Message Processor, jika Anda melihat pengecualian yang berisi pesan "Failed to instance the JavaCallout Class" selama deployment Proxy API (DeployEvent) seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Operand yang salah 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 JavaCallout com.something.apigee.callout.crypto.main.SecretCallout tidak dapat dibuat instance-nya. Error ini umumnya terjadi saat 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 berkaitan dengan paket com.something.apigee.callout.crypto.main dan pastikan bahwa class tertentu com.something.apigee.callout.crypto.main.SecretCallout tidak ada.

Resolusi

  1. Tambahkan class yang hilang ke file JAR tertentu dan upload file JAR tersebut.
  2. Deploy ulang Proxy API.
  3. Pada contoh di atas, kami menyelesaikan masalah dengan:
    1. Menambahkan class com.something.apigee.callout.crypto.main.SecretCallout yang hilang ke file JAR.
    2. Mengupload file JAR yang telah diperbarui dan men-deploy ulang Proxy API.

Penyebab: Operand yang salah digunakan dengan operator di Alur Kondisi

Diagnosis

  1. Di log Message Processor, jika Anda melihat com.apigee.expressions.parser.ParseException selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan pada contoh pesan di bawah, lanjutkan ke Langkah #2. Jika tidak, lihat penyebab berikutnya Kebijakan Hostname tidak valid di Logging Pesan.

    Contoh Pesan Error

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

    Contoh : Operand untuk ekspresi <Operator> harus berupa ekspresi data

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

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

    1. Ekspresi di kedua sisi operator memiliki jenis yang sama. Misalnya, jika Anda memiliki variabel string di sisi kiri operator, Anda harus memiliki variabel string lain atau nilai string 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. Mari kita lihat contoh untuk memahami masalah ini. Berikut adalah contoh kondisi kesalahan yang

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. Dalam contoh ini, Anda dapat mengamati bahwa tidak ada spasi antara operator "or" dan kemudian kondisi berikutnya. Jadi, saat kondisi kedua diuraikan, ekspresi pertama 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 kedua sisi operator.
  2. Pada contoh yang dibahas di atas, resolusinya adalah untuk memastikan bahwa ada spasi setelah operator "or" 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 Message Processor, jika Anda melihat pengecualian dengan pesan "Invalid HostName" selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan di bawah, maka 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 deployment gagal karena "HostName '<nama host>' tidak valid untuk pengendali Syslog". Hal ini menunjukkan bahwa HostName yang digunakan dalam Kebijakan MessageLogging merupakan nama host yang tidak valid.

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

  4. Karakter khusus yang tidak diinginkan ini adalah 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. Tindakan ini telah menyelesaikan masalah.

Contoh 2: Nama Host yang Tidak Dapat Diselesaikan

  1. Log Message Processor 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 deployment gagal karena "HostName '<nama host>' tidak valid untuk pengendali Syslog".

  3. Jika Anda membaca baris di atas pengecualian, Anda dapat melihat bahwa Message Processor 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 dalam revisi khusus Proxy API dan verifikasi nama host serta port # yang digunakan. Pada contoh di atas, nama Proxy API: myapi, dirender: 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 host dengan port tertentu. Untuk contoh ini, kami mencoba telnet dan mendapatkan error yang sama seperti yang terlihat pada log Message Processor:

      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. Pada log Message Processor, jika Anda melihat pengecualian dengan pesan "KeyValueMap name is invalid" selama deployment Proxy API atau Alur Bersama seperti yang ditunjukkan di bawah, maka 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 Prosesor Pesan yang menampilkan pengecualian dengan pesan "Nama KeyValueMap tidak valid" 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 error deployment terjadi untuk Proxy API: CustomerAPI, revisi: 1.

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

  6. Dengan melihat paket Proxy API, Anda menemukan bahwa ada satu kebijakan KeyValuMapOperations yang memiliki kode seperti yang ditunjukkan 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 kosong. Hal inilah yang menyebabkan error Deployment.

Resolusi

  1. Ubah kebijakan KeyValueMapOperations agar memiliki nama valid yang tepat untuk KeyValueMap.
  2. Pada contoh di atas, kami menyelesaikan masalah dengan mengubah KeyValueMapOperations agar memiliki nama KeyValueMap sebagai "MyKeyValueMap" seperti yang 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 terus 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 dalam Playbook ini yang telah dicoba dan insight lain apa pun yang akan membantu kami menyelesaikan masalah ini dengan cepat.