Menginvokasi fungsi Lambda dengan fungsi native Aurora MySQL - Amazon Aurora

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menginvokasi fungsi Lambda dengan fungsi native Aurora MySQL

catatan

Anda dapat memanggil fungsi native lambda_sync dan lambda_async saat Anda menggunakan Aurora MySQL versi 2, atau Aurora MySQL versi 3.01 dan lebih tinggi. Untuk informasi selengkapnya tentang versi Aurora MySQL, lihat Pembaruan mesin database untuk Amazon Aurora My SQL.

Anda dapat memanggil AWS Lambda fungsi dari cluster DB MySQL Aurora dengan memanggil fungsi asli dan. lambda_sync lambda_async Pendekatan ini dapat berguna ketika Anda ingin mengintegrasikan database Anda berjalan di Aurora MySQL dengan layanan lain. AWS Misalnya, Anda mungkin ingin mengirim pemberitahuan menggunakan Amazon Simple Notification Service (Amazon SNS) setiap kali sebuah baris dimasukkan ke dalam tabel tertentu di basis data Anda.

Menggunakan fungsi native untuk menginvokasi fungsi Lambda

Fungsi lambda_sync dan lambda_async adalah fungsi native default yang menginvokasi fungsi Lambda secara sinkron atau asinkron. Ketika Anda harus mengetahui hasil dari fungsi Lambda sebelum beralih ke tindakan lain, gunakan fungsi sinkron lambda_sync. Ketika Anda tidak harus mengetahui hasil dari fungsi Lambda sebelum beralih ke tindakan lain, gunakan fungsi asinkron lambda_async.

Memberikan peran dalam Aurora MySQL versi 3

Di Aurora MySQL versi 3, pengguna yang menginvokasi fungsi native harus diberi peran AWS_LAMBDA_ACCESS. Untuk memberikan peran ini kepada pengguna, hubungkan ke instans DB sebagai pengguna administratif, dan jalankan pernyataan berikut.

GRANT AWS_LAMBDA_ACCESS TO user@domain-or-ip-address

Anda dapat mencabut peran ini dengan menjalankan pernyataan berikut.

REVOKE AWS_LAMBDA_ACCESS FROM user@domain-or-ip-address
Tip

Saat Anda menggunakan teknik peran di Aurora MySQL versi 3, Anda juga dapat mengaktifkan peran dengan menggunakan pernyataan SET ROLE role_name atau SET ROLE ALL. Jika Anda tidak memahami sistem peran MySQL 8.0, Anda dapat mempelajari selengkapnya dalam Model hak akses berbasis peran. Untuk detail selengkapnya, lihat Menggunakan peran dalam Manual Referensi MySQL.

Hal ini hanya berlaku untuk sesi aktif saat ini. Ketika Anda terhubung kembali, Anda harus menjalankan SET ROLE pernyataan lagi untuk memberikan hak istimewa. Untuk informasi selengkapnya, lihat SET ROLE statement dalam Panduan Referensi MySQL.

Anda dapat menggunakan parameter klaster DB activate_all_roles_on_login untuk mengaktifkan semua peran secara otomatis saat pengguna terhubung ke instans DB. Ketika parameter ini disetel, Anda biasanya tidak perlu memanggil SET ROLE pernyataan secara eksplisit untuk mengaktifkan peran. Untuk informasi selengkapnya, lihat activate_all_roles_on_login dalam Panduan Referensi MySQL.

Namun, Anda harus memanggil secara SET ROLE ALL eksplisit di awal prosedur tersimpan untuk mengaktifkan peran, ketika prosedur yang disimpan dipanggil oleh pengguna yang berbeda.

Jika Anda mendapatkan kesalahan seperti berikut ketika Anda mencoba menginvokasi fungsi Lambda, kemudian jalankan pernyataan SET ROLE.

SQL Error [1227] [42000]: Access denied; you need (at least one of) the Invoke Lambda privilege(s) for this operation

Pastikan Anda memberikan peran kepada pengguna yang benar, seperti yang ditunjukkan pada entri mysql.users tabel. Mungkin ada beberapa pengguna dengan nama yang sama, tetapi pada host yang berbeda. Bergantung pada aplikasi atau host mana yang menjalankan lambda_sync fungsi, MySQL memilih pengguna dengan kecocokan terbaik sesuai dengan entri kolom. host

Memberikan hak akses di Aurora MySQL versi 2

Di Aurora MySQL versi 2, pengguna yang menginvokasi fungsi native harus diberi hak akses INVOKE LAMBDA. Untuk memberikan hak akses ini kepada pengguna, hubungkan ke instans DB sebagai pengguna administratif, lalu jalankan pernyataan berikut.

GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address

Anda dapat mencabut hak akses ini dengan menjalankan pernyataan berikut.

REVOKE INVOKE LAMBDA ON *.* FROM user@domain-or-ip-address

Sintaksis untuk fungsi lambda_sync

Anda menginvokasi fungsi lambda_sync secara sinkron dengan jenis invokasi RequestResponse. Fungsi ini menampilkan hasil invokasi Lambda dalam payload JSON. Fungsi tersebut memiliki sintaksis berikut.

lambda_sync ( lambda_function_ARN, JSON_payload )

Parameter untuk fungsi lambda_sync

Fungsi lambda_sync memiliki parameter berikut.

lambda_function_ARN

Amazon Resource Name (ARN) dari fungsi Lambda yang akan diinvokasi.

JSON_payload

Payload untuk fungsi Lambda yang diinvokasi, dalam format JSON.

catatan

Aurora MySQL versi 3 mendukung fungsi penguraian JSON dari MySQL 8.0. Namun, Aurora MySQL versi 2 tidak menyertakan fungsi-fungsi tersebut. Penguraian JSON tidak diperlukan saat fungsi Lambda menghasilkan nilai atomis, seperti angka atau string.

Contoh untuk fungsi lambda_sync

Kueri berikut berdasarkan lambda_sync menginvokasi fungsi Lambda BasicTestLambda secara sinkron menggunakan fungsi ARN. Payload untuk fungsi tersebut adalah {"operation": "ping"}.

SELECT lambda_sync( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

Sintaksis untuk fungsi lambda_async

Anda menginvokasi fungsi lambda_async secara asinkron dengan jenis invokasi Event. Fungsi ini menampilkan hasil invokasi Lambda dalam payload JSON. Fungsi tersebut memiliki sintaksis berikut.

lambda_async ( lambda_function_ARN, JSON_payload )

Parameter untuk fungsi lambda_async

Fungsi lambda_async memiliki parameter berikut.

lambda_function_ARN

Amazon Resource Name (ARN) dari fungsi Lambda yang akan diinvokasi.

JSON_payload

Payload untuk fungsi Lambda yang diinvokasi, dalam format JSON.

catatan

Aurora MySQL versi 3 mendukung fungsi penguraian JSON dari MySQL 8.0. Namun, Aurora MySQL versi 2 tidak menyertakan fungsi-fungsi tersebut. Penguraian JSON tidak diperlukan saat fungsi Lambda menghasilkan nilai atomis, seperti angka atau string.

Contoh untuk fungsi lambda_async

Kueri yang didasarkan pada lambda_async berikut akan menginvokasi fungsi Lambda BasicTestLambda secara asinkron menggunakan fungsi ARN. Payload untuk fungsi tersebut adalah {"operation": "ping"}.

SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

Menginvokasi fungsi Lambda di dalam pemicu

Anda dapat menggunakan pemicu untuk memanggil Lambda pada pernyataan pengubahan data. Contoh berikut menggunakan fungsi native lambda_async dan menyimpan hasilnya dalam variabel.

mysql>SET @result=0; mysql>DELIMITER // mysql>CREATE TRIGGER myFirstTrigger AFTER INSERT ON Test_trigger FOR EACH ROW BEGIN SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}') INTO @result; END; // mysql>DELIMITER ;
catatan

Pemicu tidak dijalankan sekali per pernyataan SQL, tetapi sekali per baris yang diubah, satu baris dalam satu waktu. Saat pemicu berjalan, prosesnya sinkron. Pernyataan modifikasi data hanya menampilkan hasil saat pemicu selesai.

Hati-hati saat menjalankan AWS Lambda fungsi dari pemicu pada tabel yang mengalami lalu lintas tulis tinggi. INSERT,UPDATE, dan DELETE pemicu diaktifkan per baris. Beban kerja berat tulis di atas meja denganINSERT,UPDATE, atau DELETE pemicu menghasilkan sejumlah besar panggilan ke fungsi Anda. AWS Lambda