Fungsi Function Compute yang mengakses database dapat gagal dalam dua pola berbeda: kegagalan intermiten atau kegagalan konsisten. Panduan ini menjelaskan penyebab paling umum dan cara mengatasinya.
Kegagalan koneksi intermiten
Jika koneksi database gagal secara intermiten, lakukan pemeriksaan berikut secara berurutan.
1. Gunakan destroy() alih-alih end() untuk menutup koneksi.
Instans fungsi didaur ulang secara otomatis setelah 2 hingga 5 menit tidak aktif. Metode end() menunggu server MySQL mengonfirmasi hasil kueri sebelum menutup koneksi, yang dapat menyebabkan koneksi berada dalam keadaan tidak konsisten dan mengakibatkan timeout pada invokasi berikutnya. Panggil destroy() untuk memaksa menutup koneksi segera.
2. Ganti security group Anda dengan daftar putih alamat IP jika Anda mengakses database melalui Virtual Private Cloud (VPC).
Security group di sisi database dapat menyebabkan koneksi tidak stabil saat diakses dari Function Compute. Gunakan daftar putih alamat IP sebagai gantinya untuk memastikan lalu lintas dapat dilewatkan secara andal.
3. Jika kegagalan berlanjut, ikuti langkah-langkah dalam [Koneksi database terus-menerus gagal](#database-connection-constantly-fails).
Koneksi database terus-menerus gagal
Jika setiap upaya koneksi gagal, lakukan langkah-langkah berikut secara berurutan.
Periksa catatan koneksi di database untuk rentang waktu saat kegagalan terjadi.
Tidak ditemukan permintaan koneksi dari Function Compute → lanjut ke langkah 2.
Permintaan koneksi dari Function Compute ditemukan → lanjut ke langkah 4.
Verifikasi username dan password.
Kredensial benar → lanjut ke langkah 3.
Kredensial salah → perbaiki dan coba lagi.
Uji konektivitas jaringan dengan telnet dari instans Function Compute. Jalankan perintah berikut, ganti
<DB_HOST>dan<DB_PORT>dengan titik akhir database dan port Anda:Koneksi berhasil → lanjut ke langkah 4.
Koneksi gagal → ikuti langkah-langkah dalam Pemecahan masalah jaringan.
telnet <DB_HOST> <DB_PORT>Tinjau logika kode fungsi Anda untuk mencari bug dalam penanganan koneksi.
Function Compute menyediakan contoh kode yang dapat Anda gunakan langsung. Untuk informasi lebih lanjut, lihat Contoh kode.
Jika masalah tetap berlanjut setelah menyelesaikan semua langkah, bergabunglah dengan grup pengguna DingTalk 11721331 untuk mendapatkan dukungan teknis.
Pemecahan masalah jaringan
Akses VPC
Pastikan instans database dan fungsi berada di Wilayah yang sama.
Jika Anda melihat error
AccessDenied(kode kesalahan 403), periksa apakah fungsi Anda memiliki izin yang diperlukan pada antarmuka jaringan elastis (ENI).Jika Anda melihat error
InvalidArgument(kode kesalahan 400), verifikasi bahwa konfigurasi VPC, vSwitch, dan Security Group valid.Jika Anda mengonfigurasi daftar putih alamat IP pada database, sertakan Blok CIDR pribadi VPC dan Blok CIDR vSwitch. Untuk mengizinkan traffic dari semua alamat IP, tambahkan
0.0.0.0/0.Pastikan security group mengizinkan lalu lintas outbound ke alamat IP pribadi dan Port database.
Jika Anda melihat error
ResourceExhausted(kode kesalahan 429), vSwitch telah kehabisan alamat IP yang tersedia. Blok CIDR default memiliki panjang awalan/24, yang menyediakan 252 alamat yang dapat digunakan. Jika fungsi Anda diskalakan melebihi batas ini, perluas secara manual Blok CIDR vSwitch dan perbarui security group yang sesuai.
Akses Internet
Aktifkan akses Internet untuk layanan Anda. Untuk detailnya, lihat Konfigurasi pengaturan jaringan.
Jika database menggunakan daftar putih alamat IP statis, konfigurasikan alamat IP publik statis untuk fungsi Anda. Function Compute mengalokasikan alamat IP secara dinamis, sehingga tanpa alamat IP statis, fungsi Anda tidak dapat lolos pemeriksaan daftar putih. Untuk detailnya, lihat Konfigurasi alamat IP publik statis.
Masalah jaringan di sisi database
Untuk mengisolasi apakah masalah berasal dari sisi database, siapkan lingkungan jaringan serupa di layanan lain dan jalankan pengujian telnet:
telnet <DB_HOST> <DB_PORT>Jika koneksi berhasil, jaringan di sisi database berfungsi normal.