Konfigurasi Error Deployment Gagal

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

Gejala

Deployment revisi proxy API atau Shared Flow 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:

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 dengan error "Konfigurasi gagal" karena berbagai alasan. Tabel di bawah mencantumkan beberapa penyebab yang sering diamati dan menyebabkan error ini :

Penyebab Deskripsi Petunjuk Pemecahan Masalah yang Berlaku Untuk
Class Java Tidak Ada dalam Kebijakan JavaCallout Class Java tidak ada dalam file JAR yang direferensikan oleh kebijakan JavaCallout. Pengguna Edge Private Cloud
Operand yang salah digunakan dalam kondisi di Condition Flow Operand/ekspresi yang digunakan di satu atau kedua sisi operator dalam kondisi tidak valid.
Nama Host tidak valid dalam kebijakan Message Logging Nama host yang digunakan dalam kebijakan MessageLogging tidak dapat di-resolve 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 yang mengalami 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 Message Processor dalam output status deployment.

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

  5. Bergantung pada error/pengecualian yang diamati dalam log Message Processor, Anda harus mengikuti langkah-langkah pemecahan masalah dan resolusi yang sesuai untuk masalah tersebut.

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

Penyebab: Class Java Tidak Ada dalam Kebijakan JavaCallout

Diagnosis

  1. Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "Failed to instantiate 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 Condition Flow.
  2. Message Processor 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 jika class tertentu tidak tersedia dalam file JAR yang ditentukan dalam kebijakan JavaCallout atau salah satu file JAR dependennya.

  4. Periksa file JAR yang berisi semua class yang terkait dengan paket com.something.apigee.callout.crypto.main dan pastikan class tertentu com.something.apigee.callout.crypto.main.SecretCallout 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, kami menyelesaikan masalah dengan:
    1. Menambahkan class com.something.apigee.callout.crypto.main.SecretCallout yang tidak ada ke file JAR.
    2. Mengupload file JAR yang diperbarui dan men-deploy ulang Proxy API.

Penyebab: Operand yang salah digunakan dengan operator di Condition Flow

Diagnosis

  1. Dalam log Message Processor, jika Anda melihat com.apigee.expressions.parser.ParseException selama deployment Proxy API atau Shared Flow seperti yang ditunjukkan dalam contoh pesan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka penyebab berikutnya Nama Host tidak valid dalam kebijakan Message Logging.

    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. Message Processor menampilkan pengecualian berikut selama deployment Shared Flow:

    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 sama dengan (=), tidak sama dengan (!=), atau Statistik dengan operator (=|) memiliki masalah.

  5. Lihat kondisi di semua Condition Flow yang melibatkan operator tertentu yang disebutkan dalam pesan error dan 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 atau nilai string lain di sisi kanan.
    2. Variabel yang valid digunakan di antara operator.
    3. Ada spasi 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 error

    <Condition>
               (fault.name = "invalid_access_token") or(fault.name = "ApiKeyNotApproved")
    </Condition>
    
  8. Dalam contoh ini, Anda dapat melihat bahwa tidak ada spasi antara operator "or" dan 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. Dalam contoh yang dibahas di atas, resolusinya adalah memastikan 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. Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "Invalid HostName" selama deployment Proxy API atau Shared Flow seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka 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 masalah dan menyelesaikan masalah ini.

Contoh 1: HostName memiliki karakter khusus yang tidak diinginkan

  1. Message Processor 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 "Invalid HostName '<hostname>' for Syslog handler". Hal ini menunjukkan bahwa HostName yang digunakan dalam Kebijakan MessageLogging adalah nama host yang tidak valid.

  3. Memeriksa pengecualian dalam 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. Dalam contoh di atas, karakter khusus "/" dihapus dari Kebijakan MessageLogging. Tindakan ini menyelesaikan masalah.

Contoh 2: Nama Host yang Tidak Dapat Di-resolve

  1. Log Message Processor memiliki beberapa baris yang menunjukkan bahwa peristiwa deployment untuk Proxy API dipicu, yang diikuti oleh 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 "Invalid HostName '<hostname>' for Syslog handler".

  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 diberikan dalam kebijakan MessageLogging.

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

    1. Periksa kebijakan MessageLogging dalam revisi tertentu dari Proxy API dan verifikasi nama host dan port # yang digunakan. Dalam 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 host dengan port tertentu. Untuk contoh ini, kami mencoba telnet dan mendapatkan error yang sama seperti yang terlihat di 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 membuktikan dengan jelas bahwa nama host tidak dapat di-resolve.

Resolusi

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

Jika masalah masih berlanjut, buka Mengumpulkan Informasi Diagnostik yang Diperlukan.

Penyebab: Nama KeyValueMap tidak valid

Diagnosis

  1. Dalam log Message Processor, jika Anda melihat pengecualian dengan pesan "KeyValueMap name is invalid" selama deployment Proxy API atau Shared Flow seperti yang ditunjukkan di bawah, lanjutkan ke Langkah #2. Jika tidak, buka Mengumpulkan Informasi Diagnostik yang Diperlukan.

    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 masalah dan menyelesaikan masalah ini.

  3. Contoh log Message Processor yang 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 error deployment terjadi untuk Proxy API: CustomerAPI, revisi: 1.

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

  6. Dengan melihat paket Proxy API, Anda akan menemukan bahwa ada satu kebijakan KeyValuMapOperations yang memiliki kode seperti yang ditunjukkan di bawah:

    <?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 adalah penyebab error Deployment.

Resolusi

  1. Ubah kebijakan KeyValueMapOperations agar memiliki nama yang valid untuk KeyValueMap.
  2. Dalam contoh di atas, kami menyelesaikan masalah dengan mengubah KeyValueMapOperations agar memiliki nama KeyValueMap sebagai "MyKeyValueMap" seperti yang ditunjukkan di bawah:

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

Mengumpulkan Informasi Diagnostik yang Diperlukan

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

  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 Message Processor

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    
  3. Detail tentang bagian mana dalam Playbook ini yang telah dicoba dan insight lainnya yang akan membantu kami mempercepat penyelesaian masalah ini.