

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
<a name="AuroraMySQL.Integrating.NativeLambda"></a>

**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 MySQLVersions à long terme (LTS) et versions bêta d’Amazon Aurora MySQL](AuroraMySQL.Updates.md).

Vous pouvez appeler une AWS Lambda fonction à 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 exécutée sur Aurora MySQL à d'autres AWS services. 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.

**Contents**
+ [Utilisation d’une fonction Lambda avec une fonction native](#AuroraMySQL.Integrating.NativeLambda.lambda_functions)
  + [Octroi du rôle dans Aurora MySQL version 3](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3)
  + [Octroi du privilège dans Aurora MySQL version 2](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2)
  + [Syntaxe de la fonction lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax)
  + [Paramètres de la fonction lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters)
  + [Exemple de la fonction lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example)
  + [Syntaxe de la fonction lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax)
  + [Paramètres de la fonction lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters)
  + [Exemple de la fonction lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example)
  + [Appel d’une fonction Lambda dans un déclencheur](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger)

## Utilisation d’une fonction Lambda avec une fonction native
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions"></a>

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
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3"></a>

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 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 de rôle dans Aurora MySQL version 3, vous pouvez également activer le rôle en utilisant l’instruction `SET ROLE role_name` ou `SET 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](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model). Pour plus de détails, consultez [Using roles](https://dev.mysql.com/doc/refman/8.0/en/roles.html) dans le *manuel de référence de MySQL*.  
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](https://dev.mysql.com/doc/refman/8.0/en/set-role.html) dans le manuel *MySQL Reference Manual*.  
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\$1all\$1roles\$1on\$1login](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login) dans le manuel *MySQL Reference Manual*.  
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
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2"></a>

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 *.* 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\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax"></a>

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\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters"></a>

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

* lambda\$1function\$1ARN *  
Amazon Resource Name (ARN) de la fonction Lambda à appeler.

* JSON\$1payload *  
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\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example"></a>

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\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax"></a>

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\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters"></a>

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

* lambda\$1function\$1ARN *  
Amazon Resource Name (ARN) de la fonction Lambda à appeler.

* JSON\$1payload *  
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\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example"></a>

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
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger"></a>

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 invoquez une AWS Lambda fonction à 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` ou `DELETE` déclenchant entraîne un grand nombre d'appels vers votre AWS Lambda fonction. `UPDATE`