Appel d'une fonction Lambda avec une procédure stockée Aurora MySQL (obsolète) - Amazon Aurora

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 fonction AWS Lambda à partir d'un cluster de base de données Aurora MySQL en appelant la procédure mysql.lambda_async. Cette approche peut être utile lorsque vous souhaitez intégrer votre base de données s'exécutant sur Aurora MySQL avec d'autres services AWS. 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.

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 )

Paramètres

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 appelez une fonction AWS Lambda à partir de déclencheurs sur des tables qui connaissent un trafic d'écriture élevé. Les déclencheurs INSERT, UPDATE et DELETE 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 : invoquer une fonction AWS Lambda 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.

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

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 : invoquer une fonction AWS Lambda 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.

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

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