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 fonction native Aurora MySQL
Note
Vous pouvez appeler les fonctions natives lambda_sync et lambda_async quand vous utilisez Aurora MySQL version 2 ou Aurora MySQL version 3.01 ou ultérieure. Pour plus d’informations sur les versions d’Aurora MySQL, consultez Mises à jour du moteur de base de données pour Amazon Aurora MySQL.
Vous pouvez appeler une fonction AWS Lambda à partir d’un cluster de bases de données Aurora MySQL en appelant les fonctions natives lambda_sync et 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.
Table des matières
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 MySQL version 3
Dans Aurora MySQL version 3, l’utilisateur qui appelle une fonction native doit disposer du rôle AWS_LAMBDA_ACCESS. 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 TOuser@domain-or-ip-address
Vous pouvez révoquer ce rôle en exécutant l’instruction suivante.
REVOKE AWS_LAMBDA_ACCESS FROMuser@domain-or-ip-address
Astuce
Lorsque vous utilisez la technique de rôle dans Aurora MySQL version 3, vous pouvez également activer le rôle en utilisant l’instruction SET ROLE ou role_nameSET ROLE
ALL. Si vous n’êtes pas familier avec le système de rôles MySQL 8.0, vous pouvez en apprendre davantage dans Modèle de privilège basé sur les rôles. Pour plus de détails, consultez Using roles
Cela s’applique uniquement à la session active en cours. Lorsque vous vous reconnectez, vous devez à nouveau exécuter l’instruction SET ROLE pour accorder des privilèges. Pour plus d’informations, consultez SET ROLE statement
Vous pouvez utiliser le paramètre activate_all_roles_on_login de cluster de bases 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, vous n’avez pas besoin d’appeler explicitement l’instruction SET ROLE pour activer un rôle. Pour plus d’informations, consultez activate_all_roles_on_login
Toutefois, vous devez appeler SET ROLE ALL explicitement au début d’une procédure stockée pour activer le rôle, lorsque cette procédure 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
Assurez-vous d’attribuer le rôle à l’utilisateur approprié, comme indiqué dans les entrées de la table mysql.users. Plusieurs utilisateurs peuvent avoir le même nom, mais sur des hôtes différents. En fonction de l’application ou de l’hôte qui invoque la fonction lambda_sync, MySQL sélectionne l’utilisateur présentant la meilleure correspondance selon les entrées de colonne host.
Octroi du privilège dans Aurora MySQL version 2
Dans Aurora MySQL version 2, l’utilisateur qui appelle une fonction native doit se voir accorder le privilège INVOKE LAMBDA. 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 *.* TOuser@domain-or-ip-address
Vous pouvez révoquer ce privilège en exécutant l’instruction suivante.
REVOKE INVOKE LAMBDA ON *.* FROMuser@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 des données utiles 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.
- lambda_function_ARN
-
Amazon Resource Name (ARN) de la fonction Lambda à appeler.
- JSON_payload
-
Charge utile de la fonction Lambda appelée au format JSON.
Note
Aurora MySQL version 3 prend en charge les fonctions d’analyse JSON de MySQL 8.0. Toutefois, Aurora MySQL version 2 n’inclut pas ces fonctions. L’analyse JSON n’est pas requise lorsqu’une fonction Lambda renvoie une valeur atomique, telle qu’un numéro ou une chaîne.
Exemple de la fonction lambda_sync
La requête suivante basée sur lambda_sync appelle la fonction Lambda BasicTestLambda de façon synchrone en utilisant l’ARN de la fonction. 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 des données utiles 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.
- lambda_function_ARN
-
Amazon Resource Name (ARN) de la fonction Lambda à appeler.
- JSON_payload
-
Charge utile de la fonction Lambda appelée au format JSON.
Note
Aurora MySQL version 3 prend en charge les fonctions d’analyse JSON de MySQL 8.0. Toutefois, Aurora MySQL version 2 n’inclut pas ces fonctions. L’analyse JSON n’est pas requise lorsqu’une fonction Lambda renvoie une valeur atomique, telle qu’un numéro ou une chaîne.
Exemple de la fonction lambda_async
La requête suivante basée sur lambda_async appelle la fonction Lambda BasicTestLambda de façon asynchrone en utilisant l’ARN de la fonction. 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 instruction SQL, mais une fois par ligne modifiée, une ligne à la fois. 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 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.