Saya cuba menggunakan fungsi Lambda untuk menulis data ke pangkalan data MySQL AWS Aurora.
Atas sebab tertentu ia nampaknya tidak berfungsi. Kod saya setakat ini sangat mudah tetapi ia tidak dilaksanakan dengan betul. Ini ialah fungsi Lambda ringkas yang dipanggil apabila pengguna mendaftar ke Cognito dan harus membuat entri baharu dalam pangkalan data SQL yang mengandungi bukti kelayakan pengguna.
const mysql = require('mysql') const db = mysql.createConnection({ hos: "****", pelabuhan: *****, pengguna: "*****", kata laluan: "*****", pangkalan data: "*****", }) eksport const lambdaHandler = async (acara: mana-mana, konteks: mana-mana,) => pengguna const = { uid: event.request.userAttributes.sub, nama pengguna: event.request.userAttributes.nickname, e-mel: event.request.userAttributes.email, } console.log("sebelum pertanyaan") const query = `MASUKKAN KE DALAM pengguna (Uid, Nama Pengguna, E-mel) NILAI (${user.uid}, ${user.nama}, ${user.email})` tunggu db.query(query, (err: any, result: any) => { jika (err) console.error(err) console.log("tindak balas pertanyaan: " + hasil) }) console.log("selepas pertanyaan") acara pulang; };
Output fungsi adalah seperti berikut:
START RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Versi: $LATEST 2022-03-17T14:02:35.956Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO sebelum pertanyaan 2022-03-17T14:02:35.961Z bb1d2143-97e4-4761-a48a-f482cf94f73b INFO selepas pertanyaan Id Permintaan TAMAT: bb1d2143-97e4-4761-a48a-f482cf94f73b REPORT RequestId: bb1d2143-97e4-4761-a48a-f482cf94f73b Init Tempoh: 0.14 ms Tempoh: 138.07 ms Dibilkan Tempoh: 139 ms Saiz Memori: 128 MB Maks Memori Digunakan: 128 MBNota: Fungsi pertanyaan tidak menemui rekod log (harus membuang ralat atau log respons)
Dasar berikut disertakan dalam peranan pelaksanaan fungsi Lambda: AWSLambdaVPCAccessExecutionRole
dan AWSLambda_FullAccess
Fungsi Lambda dan Aurora berada dalam subnet berbeza bagi VPC yang sama. Saya tidak pasti sama ada ini akan menyebabkan masalah. Tetapi bukankah ini akan menyebabkan fungsi membuang ralat? Ralat serupa dengan
Saya tidak faham apa yang saya hilang pada ketika ini
Masalahnya ialah
db.query
menggunakan gaya panggil balik dan bukannya gaya janji. Anda perlu menukarnya untuk menggunakan janji.Salah satu cara ialah menggunakan
Util.promisify
...