Chiamare una funzione Lambda con una procedura archiviata Aurora MySQL (obsoleto) - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Chiamare una funzione Lambda con una procedura archiviata Aurora MySQL (obsoleto)

Puoi chiamare una funzione AWS Lambda da un cluster database Aurora MySQL utilizzando la procedura mysql.lambda_async. Questo approccio può essere utile quando si desidera integrare il database in esecuzione su Aurora MySQL con altri servizi AWS. Ad esempio, potresti voler inviare una notifica usando Amazon Simple Notification Service (Amazon SNS) ogni volta che una riga viene inserita in una tabella specifica nel database.

Considerazioni sulle versioni Aurora MySQL

In Aurora MySQL versione 2 puoi utilizzare il metodo delle funzioni native anziché queste stored procedure per richiamare una funzione Lambda. Per ulteriori informazioni sulle funzioni native, consulta Utilizzo delle funzioni native per chiamare una funzione Lambda.

In Aurora MySQL versione 2, la stored procedure mysql.lambda_async non è più supportata. Ti consigliamo di utilizzare le funzioni Lambda native.

In Aurora MySQL versione 3, la procedura archiviata non è disponibile.

Utilizzo della procedura mysql.lambda_async per chiamare una funzione Lambda (obsoleto)

La procedura mysql.lambda_async è una stored procedure predefinita che chiama una funzione Lambda in modo asincrono. Per utilizzare questa procedura, l'utente del database deve avere il privilegio EXECUTE sulla stored procedure mysql.lambda_async.

Sintassi

La procedura mysql.lambda_async ha la seguente sintassi.

CALL mysql.lambda_async ( lambda_function_ARN, lambda_function_input )

Parametri

La procedura mysql.lambda_async include i seguenti parametri.

lambda_function_ARN

Amazon Resource Name (ARN) della funzione Lambda da chiamare.

lambda_function_input

La stringa di input in formato JSON per chiamare la funzione Lambda.

Esempi

Come best practice, ti consigliamo di inserire le chiamate alla procedura mysql.lambda_async in una procedura archiviata che può essere richiamata da origini diverse come trigger o codice client. Questo approccio può evitare problemi di resistenza non corrispondente e rendere più semplice per richiamare le funzioni Lambda.

Nota

Prestare attenzione quando si richiama una funzione AWS Lambda dai trigger sulle tabelle che hanno un elevato traffico di scrittura. Per ciascuna riga vengono attivati i trigger INSERT, UPDATE e DELETE. Un carico di lavoro pesante in scrittura su una tabella con trigger INSERT, UPDATE e DELETE genera un numero elevato di chiamate alla funzione AWS Lambda.

Sebbene le chiamate alla procedura mysql.lambda_async siano asincrone, i trigger sono sincroni. Un'istruzione che genera un numero elevato di attivazioni di trigger non attende il completamento della chiamata alla funzione AWS Lambda, ma attende il completamento dei trigger prima di restituire il controllo al client.

Esempio: chiama una funzione AWS Lambda per inviare un'e-mail

Nell'esempio seguente viene creata una stored procedure che è possibile chiamare nel codice del database per inviare un'e-mail utilizzando una funzione Lambda.

Funzione AWS Lambda

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'] } } } )

Stored procedure

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 ;

Chiama la stored procedure per chiamare la funzione AWS Lambda

mysql> call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
Esempio: chiama una funzione AWS Lambda per pubblicare un evento di un trigger

Nell'esempio seguente viene creata una stored procedure che pubblica un evento utilizzando Amazon SNS. Il codice chiama la procedura da un trigger quando una riga viene aggiunta a una tabella.

Funzione AWS Lambda

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' )

Stored procedure

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 ;

Tabella

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;

Trigger

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 ;

Inserisci una riga nella tabella per attivare la notifica

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