Memanggil fungsi Lambda dengan Aurora Prosedur tersimpan SQL Saya (tidak digunakan lagi) - Amazon Aurora

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

Memanggil fungsi Lambda dengan Aurora Prosedur tersimpan SQL Saya (tidak digunakan lagi)

Anda dapat memanggil AWS Lambda fungsi dari cluster Aurora My SQL DB dengan memanggil prosedur. mysql.lambda_async Pendekatan ini dapat berguna ketika Anda ingin mengintegrasikan database Anda yang berjalan di Aurora My SQL dengan yang lain AWS layanan. Misalnya, Anda mungkin ingin mengirim pemberitahuan menggunakan Amazon Simple Notification Service (AmazonSNS) setiap kali baris dimasukkan ke dalam tabel tertentu dalam database Anda.

Aurora Pertimbangan versi saya SQL

Mulai di Aurora My SQL versi 2, Anda dapat menggunakan metode fungsi asli alih-alih prosedur tersimpan ini untuk memanggil fungsi Lambda. Untuk informasi selengkapnya tentang fungsi native, lihat Menggunakan fungsi native untuk menginvokasi fungsi Lambda.

Di Aurora My SQL versi 2, prosedur yang disimpan tidak lagi mysql.lambda_async didukung. Sebaiknya gunakan fungsi Lambda native sebagai gantinya.

Di Aurora My SQL versi 3, prosedur yang disimpan 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_fungsi_ ARN

Nama Sumber Daya Amazon (ARN) dari fungsi Lambda untuk dipanggil.

lambda_function_input

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

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 memanggil AWS Lambda berfungsi dari pemicu pada tabel yang mengalami lalu lintas tulis tinggi. INSERT,UPDATE, dan DELETE pemicu diaktifkan per baris. Beban kerja yang berat di atas meja denganINSERT,UPDATE, atau DELETE pemicu menghasilkan sejumlah besar panggilan ke Anda AWS Lambda fungsi.

Meskipun panggilan ke prosedur mysql.lambda_async bersifat asinkron, pemicunya bersifat sinkron. Pernyataan yang menghasilkan sejumlah besar aktivasi pemicu tidak menunggu panggilan ke AWS Lambda berfungsi untuk menyelesaikan, 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 Memanggil AWS Lambda Fungsi

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 acara dengan menggunakan AmazonSNS. 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!');