Pangkalan data MySQL AWS Aurora tidak boleh ditanya oleh fungsi Node Lambda
P粉184747536
2023-08-25 21:31:48
<p>Saya cuba menggunakan fungsi Lambda untuk menulis data ke pangkalan data MySQL AWS Aurora. </p>
<h3>kod</h3>
<p>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. </p>
<pre class="brush:php;toolbar:false;">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;
};</pre>
<p>Output fungsi adalah seperti berikut: </p>
<pre class="brush:php;toolbar:false;">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 MB</pre
<p>Nota: Fungsi pertanyaan tidak menemui rekod log (harus membuang ralat atau log respons)</p>
<h3>Strategi</h3>
<p>Dasar berikut disertakan dalam peranan pelaksanaan fungsi Lambda: <code>AWSLambdaVPCAccessExecutionRole</code> dan <code>AWSLambda_FullAccess</code></p>
<h3>Lain-lain</h3>
<p>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 <kod>kebenaran hilang</kod>? </p>
<p>Saya tidak faham apa yang saya hilang pada ketika ini</p>
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
...