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.
Indice
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!');