Memecahkan masalah error respons

Halaman ini menjelaskan cara memecahkan masalah error yang Anda terima sebagai respons dari permintaan ke API Anda.

BAD_GATEWAY

Jika Anda menerima kode error 13 dan pesan BAD_GATEWAY, hal ini menunjukkan bahwa Extensible Service Proxy (ESP) tidak dapat menjangkau backend layanan. Periksa hal-hal berikut:

  • Pastikan layanan backend sedang berjalan. Cara Anda melakukannya bergantung pada backend.

  • Port alamat IP layanan backend yang benar telah ditentukan:
    • Untuk GKE, periksa nilai flag ESP --backend (opsi singkatnya adalah -a) di file manifes deployment Anda (sering kali disebut deployment.yaml).
    • Untuk Compute Engine, periksa nilai flag ESP --backend (opsi singkatnya adalah -a) dalam perintah docker run.

reset reason: connection failure

Jika Anda menerima kode HTTP 503 atau kode gRPC 14 dan pesan upstream connect error or disconnect/reset before headers. reset reason: connection failure, hal ini menunjukkan bahwa ESPv2 tidak dapat menjangkau backend layanan.

Untuk memecahkan masalah, periksa kembali item di bawah.

Alamat Backend

ESPv2 harus dikonfigurasi dengan alamat backend yang benar. Masalah yang umum mencakup:

  • Skema alamat backend harus cocok dengan jenis aplikasi backend. Backend OpenAPI harus berupa http:// dan backend gRPC harus berupa grpc://.
  • Untuk ESPv2 yang di-deploy di Cloud Run, skema alamat backend harus berupa https:// atau grpcs://. s memberi tahu ESPv2 untuk menyiapkan TLS dengan backend.

Pencarian DNS

Secara default, ESPv2 berupaya me-resolve nama domain ke alamat IPv6. Jika resolusi IPv6 gagal, ESPv2 akan kembali ke alamat IPv4.

Untuk beberapa jaringan, mekanisme penggantian mungkin tidak berfungsi sebagaimana mestinya. Sebagai gantinya, Anda dapat memaksa ESPv2 untuk menggunakan alamat IPv4 melalui flag --backend_dns_lookup_family.

Error ini umum terjadi jika Anda mengonfigurasi Konektor VPC Serverless untuk ESPv2 yang di-deploy di Cloud Run. VPC tidak mendukung traffic IPv6.

API is not enabled for the project

Jika Anda mengirim kunci API dalam permintaan, pesan error seperti "API my-api.endpoints.example-project-12345.cloud.goog is not enabled for the project" menunjukkan bahwa kunci API dibuat dalam project Google Cloud yang berbeda dengan API. Untuk memperbaiki masalah ini, Anda dapat membuat kunci API di project Google Cloud yang sama dengan yang terkait dengan API, atau Anda dapat mengaktifkan API di project Google Cloud tempat kunci API dibuat.

Service control request failed with HTTP response code 403

Jika Anda menerima kode error 14 dan pesan Service control request failed with HTTP response code 403, hal ini menunjukkan bahwa Service Control API (servicecontrol.googleapis.com) tidak diaktifkan pada project.

  1. Lihat Memeriksa layanan yang diperlukan untuk memastikan semua layanan yang diperlukan Endpoint dan ESP diaktifkan di project Anda.

  2. Baca bagian Memeriksa izin yang diperlukan untuk memastikan semua izin yang diperlukan untuk akun layanan yang terkait dengan instance yang menjalankan ESP.

Method doesn't allow unregistered callers

ESP merespons dengan error, Method doesn't allow unregistered callers, saat Anda telah menentukan kunci API di bagian security dalam dokumen OpenAPI, tetapi permintaan ke API Anda tidak memiliki kunci API yang ditetapkan ke parameter kueri bernama key.

Jika Anda perlu membuat kunci API untuk melakukan panggilan ke API, lihat Membuat kunci API.

Method does not exist

Respons, Method does not exist, berarti bahwa metode HTTP (GET, POST, atau lainnya) di jalur URL yang ditentukan tidak ditemukan. Untuk memecahkan masalahnya, bandingkan konfigurasi layanan yang telah Anda deploy untuk memastikan nama metode dan jalur URL yang Anda kirim dalam permintaan sudah cocok:

  1. Di konsol Google Cloud, buka halaman Endpoint Services untuk project Anda.

    Buka halaman Layanan Endpoint

  2. Jika Anda memiliki lebih dari satu API, pilih API yang Anda kirimi permintaan.

  3. Klik tab Histori deployment.

  4. Pilih deployment terbaru untuk melihat konfigurasi layanan.

Jika metode yang Anda panggil tidak ditentukan di bagian paths pada dokumen OpenAPI, tambahkan metode atau tambahkan flag x-google-allow di bagian atas file:

x-google-allow: all

Flag ini berarti Anda tidak dapat mencantumkan semua metode yang didukung pada backend dalam dokumen OpenAPI. Saat all digunakan, semua panggilan, dengan atau tanpa kunci API atau autentikasi pengguna, akan diteruskan melalui ESP ke API Anda. Lihat x-google-allow untuk informasi selengkapnya.

Error khusus untuk lingkungan fleksibel App Engine

Bagian ini menjelaskan respons error dari API yang di-deploy di lingkungan fleksibel App Engine.

Kode error 502 atau 503

App Engine mungkin memerlukan waktu beberapa menit agar berhasil merespons permintaan. Jika Anda mengirim permintaan dan mendapatkan HTTP 502, 503, atau error server lainnya, tunggu sebentar lalu coba permintaan lagi.

Pesan error BAD_GATEWAY

Kode error 502 dengan BAD_GATEWAY dalam pesan biasanya menunjukkan bahwa App Engine menghentikan aplikasi karena kehabisan memori. VM fleksibel App Engine default hanya memiliki memori sebesar 1 GB, dan hanya 600 MB yang tersedia untuk penampung aplikasi.

Untuk memecahkan masalah kode error 502:

  1. Di Konsol Google Cloud, buka halaman Logging:

    Buka halaman Logs Explorer

  2. Pilih project Google Cloud yang berlaku di bagian atas halaman.

  3. Pilih Aplikasi Google App Engine dan buka vm.syslog.

  4. Cari entri log yang mirip dengan yang berikut ini:

    kernel: [  133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child
    kernel: [  133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB
    

    Jika Anda melihat entri Out of memory dalam log:

    1. Tambahkan kode berikut ke file app.yaml Anda untuk meningkatkan ukuran VM default:

      resources:
        memory_gb: 4
      
    2. Deploy ulang API Anda:

      gcloud app deploy
      

Jika Anda memiliki opsi rollout_strategy: managed yang ditentukan di bagian endpoints_api_service pada file app.yaml, gunakan perintah berikut untuk men-deploy ulang API:

  gcloud app deploy

Lihat Men-deploy API dan ESP untuk informasi selengkapnya.

Memeriksa log Cloud Logging

Untuk menggunakan log Cloud Logging guna membantu memecahkan masalah error respons:

  1. Pada konsol Google Cloud, buka halaman Logging.

    Buka halaman Logs Explorer

  2. Di bagian atas halaman, pilih project Google Cloud.

  3. Menggunakan menu drop-down di sebelah kiri, pilih Production API > [YOUR_SERVICE_NAME].

  4. Sesuaikan rentang waktu hingga Anda melihat baris yang menampilkan error respons.

  5. Luaskan payload JSON dan cari error_cause.

    • Jika error_cause disetel ke application, hal ini menunjukkan masalah dalam kode Anda.

    • Jika error cause berisi masalah lain dan Anda tidak dapat memperbaiki masalah tersebut, ekspor log dan sertakan log tersebut dalam komunikasi apa pun yang Anda lakukan dengan Google.

Lihat informasi selengkapnya di sini:

  • Untuk mengetahui detail tentang struktur log di Logs Explorer, lihat Referensi log endpoint

  • Mulai menggunakan Logs Explorer.

  • Gunakan Kueri log lanjutan untuk pemfilteran lanjutan, seperti mendapatkan semua permintaan dengan latensi lebih besar dari 300 milidetik.

Masalah terkait contoh Invoke-WebRequest

Pada beberapa versi Windows PowerShell, contoh Invoke-WebRequest dalam tutorial gagal. Kami juga menerima laporan bahwa responsnya berisi daftar byte yang tidak ditandatangani yang harus dikonversi menjadi karakter. Jika contoh Invoke-WebRequest tidak menampilkan hasil yang diharapkan, coba kirim permintaan menggunakan aplikasi lain. Berikut beberapa saran:

  • Mulai Cloud Shell dan ikuti langkah-langkah Linux dalam tutorial yang Anda gunakan untuk mengirim permintaan.
  • Instal aplikasi pihak ketiga, seperti ekstensi browser Chrome Postman (ditawarkan oleh www.getpostman.com). Saat membuat permintaan di Postman:

    • Pilih POST sebagai kata kerja HTTP.
    • Untuk header, pilih kunci content-type dan nilai application/json.
    • Untuk isi, masukkan: {"message":"hello world"}
    • Di URL, gunakan kunci API yang sebenarnya, bukan variabel lingkungan. Contoh:

      • Di lingkungan fleksibel App Engine: https://example-project-12345.appspot.com/echo?key=AIza...
      • Di backend lain: http://192.0.2.0:80/echo?key=AIza...
  • Download dan instal curl, yang Anda jalankan di command prompt. Karena Windows tidak menangani tanda kutip ganda yang disusun bertingkat di dalam tanda kutip tunggal, Anda harus mengubah opsi --data dalam contoh untuk:

    --data "{\"message\":\"hello world\"}"