Richiamo di una funzione Lambda con una procedura memorizzata Aurora SQL My (obsoleta) - 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à.

Richiamo di una funzione Lambda con una procedura memorizzata Aurora SQL My (obsoleta)

È possibile richiamare un AWS Lambda funzione da un cluster Aurora My SQL DB chiamando la mysql.lambda_async procedura. Questo approccio può essere utile quando si desidera integrare il database in esecuzione su Aurora My SQL con altri AWS servizi. Ad esempio, potresti voler inviare una notifica utilizzando Amazon Simple Notification Service (AmazonSNS) ogni volta che una riga viene inserita in una tabella specifica del tuo database.

Aurora: Considerazioni sulla mia versione SQL

A partire dalla SQL versione 2 di Aurora My, è possibile utilizzare il metodo della funzione nativa 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 My SQL versione 2, la stored procedure non mysql.lambda_async è più supportata. Ti consigliamo di utilizzare le funzioni Lambda native.

In Aurora My SQL versione 3, la stored procedure 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.

funzione_lambda_ ARN

L'Amazon Resource Name (ARN) della funzione Lambda da richiamare.

lambda_function_input

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

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

Fai attenzione quando invoci un AWS Lambda funzione generata dai trigger su tabelle che presentano un traffico di scrittura elevato. INSERTUPDATE, e i DELETE trigger vengono attivati per riga. Un carico di lavoro di scrittura intenso su una tabella con INSERT o o DELETE trigger genera un gran numero di chiamate al UPDATE AWS Lambda funzione.

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

Esempio: invocare un AWS Lambda funzione per inviare 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.

AWS Lambda Funzione

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 ;

Richiama la Stored Procedure per richiamare il AWS Lambda Funzione

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

L'esempio seguente crea una stored procedure che pubblica un evento utilizzando AmazonSNS. Il codice chiama la procedura da un trigger quando una riga viene aggiunta a una tabella.

AWS Lambda Funzione

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