Aufrufen einer Lambda-Funktion mit einer SQL gespeicherten Aurora My-Prozedur (veraltet) - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Aufrufen einer Lambda-Funktion mit einer SQL gespeicherten Aurora My-Prozedur (veraltet)

Sie können eine aufrufen AWS Lambda Funktion von einem Aurora My SQL DB-Cluster aus, indem Sie die mysql.lambda_async Prozedur aufrufen. Dieser Ansatz kann nützlich sein, wenn Sie Ihre Datenbank, die auf Aurora My läuft, SQL mit anderen integrieren möchten AWS Dienste. Beispielsweise möchten Sie möglicherweise eine Benachrichtigung mit Amazon Simple Notification Service (AmazonSNS) senden, wenn eine Zeile in eine bestimmte Tabelle in Ihrer Datenbank eingefügt wird.

Überlegungen zu Aurora: Meine SQL Version

Ab Aurora My SQL Version 2 können Sie anstelle dieser gespeicherten Prozeduren die native Funktionsmethode verwenden, um eine Lambda-Funktion aufzurufen. Weitere Informationen zu den nativen Funktionen finden Sie unter Arbeiten mit nativen Funktionen zum Aufrufen einer Lambda-Funktion.

In Aurora My SQL Version 2 mysql.lambda_async wird die gespeicherte Prozedur nicht mehr unterstützt. Es wird dringend empfohlen, stattdessen native Lambda-Funktionen zu verwenden.

In Aurora My SQL Version 3 ist die gespeicherte Prozedur nicht verfügbar.

Verwenden der Prozedur „mysql.lambda async“ zum Aufrufen einer Lambda-Funktion (veraltet)

Bei mysql.lambda_async handelt es sich um eine integrierte gespeicherte Prozedur, mit der eine Lambda-Funktion asynchron aufgerufen wird. Zur Nutzung dieser Prozedur muss der Datenbankbenutzer über die EXECUTE-Berechtigung für die gespeicherte Prozedur mysql.lambda_async verfügen.

Syntax

Die Prozedur mysql.lambda_async verwendet die folgende Syntax.

CALL mysql.lambda_async ( lambda_function_ARN, lambda_function_input )

Parameter

Die Prozedur mysql.lambda_async hat die folgenden Parameter.

lambda_function_ ARN

Der Amazon-Ressourcenname (ARN) der aufzurufenden Lambda-Funktion.

lambda_function_input

Die Eingabezeichenfolge im JSON Format für die aufgerufene Lambda-Funktion.

Beispiele

Als bewährte Methode wird empfohlen, Aufrufe der Prozedur mysql.lambda_async in einer gespeicherten Prozedur zu verpacken, die aus verschiedenen Quellen aufgerufen werden kann, wie zum Beispiel Auslöser oder Clientcode. Mit dieser Methode werden Probleme mit Impedanzfehlanpassungen vermieden, zudem wird der Aufruf von Lambda-Funktionen vereinfacht.

Anmerkung

Seien Sie vorsichtig beim Aufrufen von AWS Lambda Funktion von Triggern in Tabellen mit hohem Schreibverkehr. INSERT,UPDATE, und DELETE Trigger werden pro Zeile aktiviert. Eine hohe Schreiblast in einer Tabelle mit INSERTUPDATE, oder DELETE Triggern führt zu einer großen Anzahl von Aufrufen an AWS Lambda Funktion.

Die Aufrufe der Prozedur mysql.lambda_async sind asynchron, Auslöser jedoch synchron. Eine Anweisung, die zu einer großen Anzahl von Triggeraktivierungen führt, wartet nicht auf den Aufruf von AWS Lambda Die Funktion ist abgeschlossen, aber sie wartet, bis die Trigger abgeschlossen sind, bevor sie die Steuerung an den Client zurückgibt.

Beispiel: Rufen Sie eine auf AWS Lambda Funktion zum Senden von E-Mails

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt, die Sie in Ihrem Datenbankcode aufrufen können, um eine E-Mail mit einer Lambda-Funktion zu senden.

AWS Lambda Funktion

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

Gespeicherte Prozedur

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 ;

Rufen Sie die gespeicherte Prozedur auf, um die aufzurufen AWS Lambda Funktion

mysql> call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
Beispiel: Rufen Sie eine auf AWS Lambda Funktion, um ein Ereignis von einem Trigger aus zu veröffentlichen

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt, die mithilfe von Amazon ein Ereignis veröffentlichtSNS. Der Code ruft die Prozedur von einem Auslöser auf, wenn eine Zeile zu einer Tabelle hinzugefügt wird.

AWS Lambda Funktion

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

Gespeicherte Prozedur

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 ;

Tabelle

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;

Auslöser

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 ;

Einfügen einer Tabellenzeile zum Auslösen der Benachrichtigung

mysql> insert into Customer_Feedback (customer_name, customer_feedback) VALUES ('Sample Customer', 'Good job guys!');