Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Appel d'une fonction Lambda avec une procédure stockée Aurora MySQL (obsolète)
Vous pouvez appeler une AWS Lambda fonction depuis un cluster de bases de données Aurora MySQL en appelant la mysql.lambda_async procédure. Cette approche peut être utile lorsque vous souhaitez intégrer votre base de données exécutée sur Aurora MySQL à d'autres AWS services. Par exemple, vous pouvez souhaiter envoyer une notification avec Amazon Simple Notification Service (Amazon SNS) chaque fois qu'une ligne est insérée dans une table spécifique de votre base de données.
Table des matières
Remarques relatives aux versions Aurora MySQL
Depuis Aurora MySQL version 2, vous pouvez utiliser la méthode des fonctions natives à la place de ces procédures stockées pour appeler une fonction Lambda. Pour de plus amples informations sur les fonctions natives, veuillez consulter Utilisation d’une fonction Lambda avec une fonction native.
Dans Aurora MySQL version 2, la procédure stockée mysql.lambda_async n'est plus prise en charge. Nous vous recommandons vivement de travailler plutôt avec des fonctions Lambda natives.
Dans Aurora MySQL version 3, la procédure stockée n'est pas disponible.
Utilisation de la procédure mysql.lambda_async pour appeler une fonction Lambda (obsolète)
La procédure mysql.lambda_async est une procédure stockée intégrée qui appelle une fonction Lambda de manière asynchrone. Pour utiliser cette procédure, votre utilisateur de base de données doit disposer du privilège EXECUTE sur la procédure stockée mysql.lambda_async.
Syntaxe
La procédure mysql.lambda_async possède la syntaxe suivante.
CALL mysql.lambda_async (
lambda_function_ARN,
lambda_function_input
)
Parameters
La procédure mysql.lambda_async possède les paramètres suivants.
- lambda_function_ARN
-
Amazon Resource Name (ARN) de la fonction Lambda à appeler.
- lambda_function_input
-
Chaîne d'entrée, au format JSON, pour la fonction Lambda appelée.
Exemples
Au titre de bonne pratique, nous vous recommandons d'encapsuler les appels de la procédure mysql.lambda_async dans une procédure stockée qui peut être appelée depuis différentes sources, telles que des déclencheurs ou le code client. Cette approche peut permettre d'éviter les problèmes d'incohérence d'impédance et faciliter l'appel des fonctions Lambda.
Note
Soyez prudent lorsque vous invoquez une AWS Lambda fonction à partir de déclencheurs sur des tables soumises à un trafic d'écriture élevé. INSERTUPDATE, et les DELETE déclencheurs sont activés par ligne. Une charge de travail d'écriture intensive sur une table avec des déclencheurs INSERT, UPDATE ou DELETE produit un grand nombre d'appels de votre fonction AWS Lambda .
Même si les appels à la procédure mysql.lambda_async sont asynchrones, les déclencheurs sont synchrones. Une instruction qui produit un grand nombre d'activation de déclencheur n'attend pas la fin de l'appel de la fonction AWS Lambda , elle attend que les déclencheurs se terminent avant de rendre le contrôle au client.
Exemple Exemple : invoquer une AWS Lambda fonction pour envoyer un e-mail
L'exemple suivant crée une procédure stockée que vous pouvez appeler dans votre code de base de données pour envoyer un e-mail à l'aide d'une fonction Lambda.
AWS Lambda Fonction
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'] } } } )
Procédure stockée
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 ;
Appel de la procédure stockée pour appeler la fonction AWS Lambda
mysql>call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
Exemple Exemple : invoquer une AWS Lambda fonction pour publier un événement à partir d'un déclencheur
L'exemple suivant crée une procédure stockée qui publie un événement avec Amazon SNS. Le code appelle la procédure à partir d'un déclencheur lorsqu'une ligne est ajoutée à une table.
AWS Lambda Fonction
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' )
Procédure stockée
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 ;
Tableau
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;
Déclencheur
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 ;
Insertion d'une ligne dans la table pour déclencher la notification
mysql>insert into Customer_Feedback (customer_name, customer_feedback) VALUES ('Sample Customer', 'Good job guys!');