Menginvokasi fungsi Lambda dengan prosedur tersimpan Aurora MySQL (sudah dihentikan) - 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 prosedur tersimpan Aurora MySQL (sudah dihentikan)

Anda dapat memanggil AWS Lambda fungsi dari cluster DB MySQL Aurora dengan memanggil prosedur. mysql.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 notifikasi menggunakan Amazon Simple Notification Service (Amazon SNS) setiap kali sebuah baris dimasukkan ke dalam tabel tertentu di basis data Anda.

Pertimbangan versi Aurora MySQL

Mulai dari Aurora MySQL versi 2, Anda dapat menggunakan metode fungsi native, bukan prosedur tersimpan ini untuk menginvokasi fungsi Lambda. Untuk informasi selengkapnya tentang fungsi native, lihat Menggunakan fungsi native untuk menginvokasi fungsi Lambda.

Di Aurora MySQL versi 2, prosedur tersimpan mysql.lambda_async tidak didukung lagi. Sebaiknya gunakan fungsi Lambda native sebagai gantinya.

Di Aurora MySQL versi 3, prosedur tersimpan tidak tersedia.

Menggunakan prosedur mysql.lambda_async untuk menginvokasi fungsi Lambda (sudah dihentikan)

Prosedur mysql.lambda_async adalah prosedur tersimpan default yang menginvokasi fungsi Lambda secara asinkron. Untuk menggunakan prosedur ini, pengguna basis data Anda harus memiliki hak akses EXECUTE pada prosedur tersimpan mysql.lambda_async.

Sintaksis

Prosedur mysql.lambda_async memiliki sintaksis berikut.

CALL mysql.lambda_async ( lambda_function_ARN, lambda_function_input )

Parameter

Prosedur mysql.lambda_async memiliki parameter berikut.

lambda_function_ARN

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

lambda_function_input

String input, dalam format JSON, untuk fungsi Lambda yang diinvokasi.

Contoh

Sebagai praktik terbaik, sebaiknya selesaikan panggilan ke prosedur mysql.lambda_async dalam prosedur tersimpan yang dapat dipanggil dari sumber berbeda seperti pemicu atau kode klien. Pendekatan ini dapat membantu menghindari masalah ketidakcocokan impedansi dan memudahkan Anda untuk menginvokasi fungsi Lambda.

catatan

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 sarat penulisan pada tabel dengan pemicu INSERT, UPDATE, atau DELETE akan menghasilkan banyak panggilan ke fungsi AWS Lambda Anda.

Meskipun panggilan ke prosedur mysql.lambda_async bersifat asinkron, pemicunya bersifat sinkron. Pernyataan yang menghasilkan sejumlah besar aktivasi pemicu tidak menunggu panggilan ke fungsi AWS Lambda selesai, tetapi menunggu pemicu selesai sebelum mengembalikan kontrol ke klien.

contoh Contoh: Memanggil AWS Lambda fungsi untuk mengirim email

Contoh berikut membuat prosedur tersimpan yang dapat Anda panggil dalam kode basis data Anda untuk mengirim email menggunakan fungsi Lambda.

AWS Lambda Fungsi

import boto3 ses = boto3.client('ses') def SES_send_email(event, context): return ses.send_email( Source=event['email_from'], Destination={ 'ToAddresses': [ event['email_to'], ] }, Message={ 'Subject': { 'Data': event['email_subject'] }, 'Body': { 'Text': { 'Data': event['email_body'] } } } )

Prosedur Tersimpan

DROP PROCEDURE IF EXISTS SES_send_email; DELIMITER ;; CREATE PROCEDURE SES_send_email(IN email_from VARCHAR(255), IN email_to VARCHAR(255), IN subject VARCHAR(255), IN body TEXT) LANGUAGE SQL BEGIN CALL mysql.lambda_async( 'arn:aws:lambda:us-west-2:123456789012:function:SES_send_email', CONCAT('{"email_to" : "', email_to, '", "email_from" : "', email_from, '", "email_subject" : "', subject, '", "email_body" : "', body, '"}') ); END ;; DELIMITER ;

Panggil Prosedur Tersimpan untuk Menginvokasi Fungsi AWS Lambda

mysql> call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
contoh Contoh: Memanggil AWS Lambda fungsi untuk mempublikasikan peristiwa dari pemicu

Contoh berikut membuat prosedur tersimpan yang menerbitkan peristiwa dengan menggunakan Amazon SNS. Kode tersebut memanggil prosedur dari pemicu ketika baris ditambahkan ke tabel.

AWS Lambda Fungsi

import boto3 sns = boto3.client('sns') def SNS_publish_message(event, context): return sns.publish( TopicArn='arn:aws:sns:us-west-2:123456789012:Sample_Topic', Message=event['message'], Subject=event['subject'], MessageStructure='string' )

Prosedur Tersimpan

DROP PROCEDURE IF EXISTS SNS_Publish_Message; DELIMITER ;; CREATE PROCEDURE SNS_Publish_Message (IN subject VARCHAR(255), IN message TEXT) LANGUAGE SQL BEGIN CALL mysql.lambda_async('arn:aws:lambda:us-west-2:123456789012:function:SNS_publish_message', CONCAT('{ "subject" : "', subject, '", "message" : "', message, '" }') ); END ;; DELIMITER ;

Tabel

CREATE TABLE 'Customer_Feedback' ( 'id' int(11) NOT NULL AUTO_INCREMENT, 'customer_name' varchar(255) NOT NULL, 'customer_feedback' varchar(1024) NOT NULL, PRIMARY KEY ('id') ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Pemicu

DELIMITER ;; CREATE TRIGGER TR_Customer_Feedback_AI AFTER INSERT ON Customer_Feedback FOR EACH ROW BEGIN SELECT CONCAT('New customer feedback from ', NEW.customer_name), NEW.customer_feedback INTO @subject, @feedback; CALL SNS_Publish_Message(@subject, @feedback); END ;; DELIMITER ;

Sisipkan Baris ke dalam Tabel untuk Memicu Notifikasi

mysql> insert into Customer_Feedback (customer_name, customer_feedback) VALUES ('Sample Customer', 'Good job guys!');