Invocation d'une fonction Lambda avec une fonction native Aurora My SQL - 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 fonction native Aurora My SQL

Note

Vous pouvez appeler lambda_sync les fonctions natives lambda_async lorsque vous utilisez Aurora My SQL version 2 ou Aurora My SQL version 3.01 ou ultérieure. Pour plus d'informations sur les SQL versions d'Aurora My, consultezMises à jour du moteur de base de données pour Amazon Aurora My SQL.

Vous pouvez invoquer un AWS Lambda fonctionne à partir d'un cluster Aurora My SQL DB en appelant les fonctions natives lambda_sync etlambda_async. 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.

Utilisation d'une fonction Lambda avec une fonction native

Les fonctions natives lambda_sync et lambda_async sont des fonctions natives intégrées qui appellent une fonction Lambda de façon synchrone ou asynchrone. Lorsque vous devez connaître le résultat de la fonction Lambda avant de passer à une autre action, utilisez la fonction synchrone lambda_sync. Lorsque vous n'avez pas besoin de connaître le résultat de la fonction Lambda avant de passer à une autre action, utilisez la fonction asynchrone lambda_async.

Octroi du rôle dans Aurora My SQL version 3

Dans Aurora My SQL version 3, le AWS_LAMBDA_ACCESS rôle doit être attribué à l'utilisateur qui invoque une fonction native. Pour accorder ce rôle à un utilisateur, connectez-vous à l'instance de base de données en tant qu'utilisateur administratif, puis exécutez l'instruction suivante.

GRANT AWS_LAMBDA_ACCESS TO user@domain-or-ip-address

Vous pouvez révoquer ce rôle en exécutant l'instruction suivante.

REVOKE AWS_LAMBDA_ACCESS FROM user@domain-or-ip-address
Astuce

Lorsque vous utilisez la technique des rôles dans Aurora My SQL version 3, vous pouvez également activer le rôle à l'aide de l'SET ROLE ALLinstruction SET ROLE role_name or. Si vous ne connaissez pas le système de rôles My SQL 8.0, vous pouvez en savoir plus dansModèle de privilège basé sur les rôles. Pour plus de détails, consultez la section Utilisation des rôles dans le manuel My SQL Reference.

Cela s'applique uniquement à la session active en cours. Lorsque vous vous reconnectez, vous devez exécuter à nouveau l'SET ROLEinstruction pour accorder des privilèges. Pour plus d'informations, voir la SETROLEdéclaration contenue dans le manuel My SQL Reference.

Vous pouvez utiliser le paramètre activate_all_roles_on_login de cluster de base de données pour activer automatiquement tous les rôles lorsqu'un utilisateur se connecte à une instance de base de données. Lorsque ce paramètre est défini, il n'est généralement pas nécessaire d'appeler explicitement l'SET ROLEinstruction pour activer un rôle. Pour plus d'informations, consultez activate_all_roles_on_login dans le manuel My Reference. SQL

Toutefois, vous devez appeler SET ROLE ALL explicitement au début d'une procédure stockée pour activer le rôle, lorsque la procédure stockée est appelée par un autre utilisateur.

Si vous obtenez une erreur telle que la suivante lorsque vous essayez d'invoquer une fonction Lambda, exécutez une instruction SET ROLE.

SQL Error [1227] [42000]: Access denied; you need (at least one of) the Invoke Lambda privilege(s) for this operation

Octroi du privilège dans Aurora My SQL version 2

Dans Aurora My SQL version 2, l'utilisateur qui invoque une fonction native doit se voir accorder le INVOKE LAMBDA privilège. Pour accorder ce privilège à un utilisateur, connectez-vous à l'instance de base de données en tant qu'utilisateur administratif, puis exécutez l'instruction suivante.

GRANT INVOKE LAMBDA ON *.* TO user@domain-or-ip-address

Vous pouvez révoquer ce privilège en exécutant l'instruction suivante.

REVOKE INVOKE LAMBDA ON *.* FROM user@domain-or-ip-address

Syntaxe de la fonction lambda_sync

Vous appelez la fonction lambda_sync de façon synchrone avec le type d'appel RequestResponse. La fonction renvoie le résultat de l'appel Lambda dans une charge utile. JSON La fonction a la syntaxe suivante.

lambda_sync ( lambda_function_ARN, JSON_payload )

Paramètres de la fonction lambda_sync

La fonction lambda_sync possède les paramètres suivants.

fonction_lambda_ ARN

Le nom de ressource Amazon (ARN) de la fonction Lambda à appeler.

JSON_charge utile

La charge utile de la fonction Lambda invoquée, JSON au format.

Note

Aurora My SQL version 3 prend en charge les fonctions d'JSONanalyse de My SQL 8.0. Cependant, la SQL version 2 d'Aurora My n'inclut pas ces fonctions. JSONl'analyse n'est pas requise lorsqu'une fonction Lambda renvoie une valeur atomique, telle qu'un nombre ou une chaîne.

Exemple de la fonction lambda_sync

La requête suivante basée sur lambda_sync invoque la fonction Lambda de manière synchrone à l'aide de BasicTestLambda la fonction. ARN La charge utile de la fonction est {"operation": "ping"}.

SELECT lambda_sync( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

Syntaxe de la fonction lambda_async

Vous appelez la fonction lambda_async de façon asynchrone avec le type d'appel Event. La fonction renvoie le résultat de l'appel Lambda dans une charge utile. JSON La fonction a la syntaxe suivante.

lambda_async ( lambda_function_ARN, JSON_payload )

Paramètres de la fonction lambda_async

La fonction lambda_async possède les paramètres suivants.

fonction_lambda_ ARN

Le nom de ressource Amazon (ARN) de la fonction Lambda à appeler.

JSON_charge utile

La charge utile de la fonction Lambda invoquée, JSON au format.

Note

Aurora My SQL version 3 prend en charge les fonctions d'JSONanalyse de My SQL 8.0. Cependant, la SQL version 2 d'Aurora My n'inclut pas ces fonctions. JSONl'analyse n'est pas requise lorsqu'une fonction Lambda renvoie une valeur atomique, telle qu'un nombre ou une chaîne.

Exemple de la fonction lambda_async

La requête suivante basée sur lambda_async invoque la fonction Lambda de manière asynchrone à l'aide de BasicTestLambda la fonction. ARN La charge utile de la fonction est {"operation": "ping"}.

SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}');

Appel d'une fonction Lambda dans un déclencheur

Vous pouvez utiliser des déclencheurs pour appeler Lambda sur les instructions de modification de données. L'exemple suivant utilise la fonction native lambda_async et stocke le résultat dans une variable.

mysql>SET @result=0; mysql>DELIMITER // mysql>CREATE TRIGGER myFirstTrigger AFTER INSERT ON Test_trigger FOR EACH ROW BEGIN SELECT lambda_async( 'arn:aws:lambda:us-east-1:123456789012:function:BasicTestLambda', '{"operation": "ping"}') INTO @result; END; // mysql>DELIMITER ;
Note

Les déclencheurs ne sont pas exécutés une fois par SQL instruction, mais une fois par ligne modifiée, ligne par ligne. Lorsqu'un déclencheur s'exécute, le processus est synchrone. L'instruction de modification des données n'est retournée que lorsque le déclencheur est terminé.

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 .