Pangkalan data MySQL AWS Aurora tidak boleh ditanya oleh fungsi Node Lambda
P粉184747536
P粉184747536 2023-08-25 21:31:48
0
1
545

Saya cuba menggunakan fungsi Lambda untuk menulis data ke pangkalan data MySQL AWS Aurora.

kod

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 MB
Nota: Fungsi pertanyaan tidak menemui rekod log (harus membuang ralat atau log respons)

Strategi

Dasar berikut disertakan dalam peranan pelaksanaan fungsi Lambda: AWSLambdaVPCAccessExecutionRole dan AWSLambda_FullAccess

Lain-lain

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

Saya tidak faham apa yang saya hilang pada ketika ini

P粉184747536
P粉184747536

membalas semua (1)
P粉960525583

Masalahnya ialahdb.querymenggunakan gaya panggil balik dan bukannya gaya janji. Anda perlu menukarnya untuk menggunakan janji.

Salah satu cara ialah menggunakanUtil.promisify...

const util = require('util'); const mysql = require('mysql'); const db = mysql.createConnection({ host: "*****", port: *****, user: "*****", password: "*****", database: "*****", }); // 将db.query转换为返回promise的函数 const promisifiedQuery = util.promisify(db.query); export const lambdaHandler = async (event: any, context: any,) => { const user = { uid: event.request.userAttributes.sub, username: event.request.userAttributes.nickname, email: event.request.userAttributes.email, }; console.log("before query"); // 顺便说一下,这样做是不好的。请阅读有关如何避免SQL注入的内容。 const query = `INSERT INTO users (Uid, Username, Email) VALUES (${user.uid}, ${user.username}, ${user.email})`; await promisifiedQuery(query).then(result => { console.log("query response: " + result) console.log("after query") }).catch(console.error) return event; };
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!