Invocation d'une fonction Lambda avec une procédure stockée Aurora SQL My (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.

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.

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_asyncest 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é. INSERTUPDATE, et les DELETE déclencheurs sont activés par ligne. Une charge de travail importante en écriture sur une table avec INSERTUPDATE, 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!');