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.
Invocation d'une fonction Lambda avec une procédure stockée Aurora SQL My (obsolète)
Vous pouvez invoquer un AWS Lambda fonctionne à partir d'un cluster Aurora My SQL DB 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 My SQL à d'autres AWS services. Par exemple, vous souhaiterez peut-être envoyer une notification à l'aide d'Amazon Simple Notification Service (AmazonSNS) chaque fois qu'une ligne est insérée dans une table spécifique de votre base de données.
Table des matières
Considérations relatives à SQL la version d'Aurora My
À partir de SQL la version 2 d'Aurora My, vous pouvez utiliser la méthode de fonction native au lieu 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 My SQL version 2, la procédure stockée n'mysql.lambda_async
est plus prise en charge. Nous vous recommandons vivement de travailler plutôt avec des fonctions Lambda natives.
Dans Aurora My SQL 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.
- fonction_lambda_ ARN
-
Le nom de ressource Amazon (ARN) de la fonction Lambda à appeler.
- lambda_function_input
-
Chaîne d'entrée, au JSON format, pour la fonction Lambda invoqué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 un AWS Lambda fonctionne à partir de déclencheurs sur des tables soumises à un trafic d'écriture élevé. INSERT
UPDATE
, et les DELETE
déclencheurs sont activés par ligne. Une charge de travail importante en écriture sur une table avec INSERT
UPDATE
, ou DELETE
déclenchant, entraîne un grand nombre d'appels vers votre AWS Lambda .
Même si les appels à la procédure mysql.lambda_async
sont asynchrones, les déclencheurs sont synchrones. Une instruction qui entraîne un grand nombre d'activations de déclencheurs n'attend pas l'appel au AWS Lambda fonction à terminer, mais elle attend que les déclencheurs soient terminés avant de redonner le contrôle au client.
Exemple : Invoquez un 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 ;
Appelez la procédure stockée pour invoquer le AWS Lambda Fonction
mysql>
call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
Exemple : Invoquez un 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 à l'aide d'AmazonSNS. 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!');