

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Chiamare una funzione Lambda con una funzione nativa Aurora MySQL
<a name="AuroraMySQL.Integrating.NativeLambda"></a>

**Nota**  
È possibile chiamare le funzioni native `lambda_sync` e `lambda_async` con Aurora MySQL versione 2 o Aurora MySQL versione 3.01 e versioni successive. Per ulteriori informazioni sulle versioni di Aurora MySQL, consulta [Aggiornamenti del motore del database per Amazon Aurora MySQLVersioni beta e con supporto a lungo termine (LTS, Long-Term Support) di Amazon Aurora MySQL](AuroraMySQL.Updates.md).

È possibile richiamare una AWS Lambda funzione da un cluster Aurora MySQL DB chiamando le funzioni native e. `lambda_sync` `lambda_async` Questo approccio può essere utile quando si desidera integrare il database in esecuzione su Aurora MySQL con altri servizi. AWS Ad esempio, potresti voler inviare una notifica usando Amazon Simple Notification Service (Amazon SNS) ogni volta che una riga viene inserita in una tabella specifica nel database.

**Contents**
+ [Utilizzo delle funzioni native per chiamare una funzione Lambda](#AuroraMySQL.Integrating.NativeLambda.lambda_functions)
  + [Concessione del ruolo in Aurora MySQL versione 3](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3)
  + [Concessione del privilegio in Aurora MySQL versione 2](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2)
  + [Sintassi per la funzione lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax)
  + [Parametri per la funzione lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters)
  + [Esempio per la funzione lambda\$1sync](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example)
  + [Sintassi per la funzione lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax)
  + [Parametri per la funzione lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters)
  + [Esempio per la funzione lambda\$1async](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example)
  + [Invocazione di una funzione Lambda all'interno di un trigger](#AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger)

## Utilizzo delle funzioni native per chiamare una funzione Lambda
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions"></a>

Le funzioni `lambda_sync` e `lambda_async` sono funzioni native predefinite che chiamano una funzione Lambda in modo sincrono o asincrono. Quando è necessario conoscere il risultato dell'esecuzione della funzione Lambda prima di passare a un'altra operazione, utilizza la funzione sincrona `lambda_sync`. Quando non è necessario conoscere il risultato della funzione Lambda prima di passare a un'altra operazione, utilizza la funzione asincrona `lambda_async`.

### Concessione del ruolo in Aurora MySQL versione 3
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v3"></a>

In Aurora MySQL versione 3, l'utente che invoca una funzione nativa deve avere il ruolo `AWS_LAMBDA_ACCESS`. Per concedere questo privilegio a un utente, connettersi all'istanza database come utente amministratore ed eseguire la seguente istruzione.

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

Si può revocare questo ruolo eseguendo la seguente istruzione.

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

**Suggerimento**  
Quando utilizzi la tecnica basata sul ruolo in Aurora MySQL versione 3, puoi anche attivare il ruolo utilizzando l'istruzione `SET ROLE role_name` o `SET ROLE ALL`. Se non si ha familiarità con il sistema dei ruoli MySQL 8.0, è possibile ottenere ulteriori informazioni in [Privilegio basato sui ruoli](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model). Per maggiori dettagli, consulta la pagina [Using roles](https://dev.mysql.com/doc/refman/8.0/en/roles.html) nel *Manuale di riferimento di MySQL*.  
Questo vale solo per la sessione attiva corrente. Quando ti riconnetti, devi eseguire di nuovo l’istruzione `SET ROLE` per concedere i privilegi. Per ulteriori informazioni, consulta [Istruzione SET ROLE](https://dev.mysql.com/doc/refman/8.0/en/set-role.html) nel *Manuale di riferimento di MySQL*.  
Puoi utilizzare il parametro `activate_all_roles_on_login` del cluster di database per attivare automaticamente tutti i ruoli quando un utente si connette a un'istanza database. Quando questo parametro è impostato, non è necessario chiamare esplicitamente l’istruzione `SET ROLE` per attivare un ruolo. Per ulteriori informazioni, consulta [activate\$1all\$1roles\$1on\$1login](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login) nel *Manuale di riferimento di MySQL*.  
Tuttavia, è necessario chiamare esplicitamente `SET ROLE ALL` all’inizio di una stored procedure per attivare il ruolo, quando la stored procedure viene chiamata da un altro utente.

Se ricevi un errore come il seguente quando provi a richiamare una funzione Lambda, esegui un'istruzione `SET ROLE`.

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

Assicurati di concedere il ruolo all’utente corretto, come mostrato nelle voci della tabella `mysql.users`. Potrebbero esserci più utenti con lo stesso nome, ma su host diversi. A seconda dell’applicazione o dell’host che invoca la funzione `lambda_sync`, MySQL seleziona l’utente con la corrispondenza migliore in base alle voci della colonna `host`.

### Concessione del privilegio in Aurora MySQL versione 2
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.v2"></a>

In Aurora MySQL versione 2, l'utente che richiama una funzione nativa deve avere il privilegio `INVOKE LAMBDA`. Per concedere questo privilegio a un utente, connettersi all'istanza database come utente amministratore ed eseguire la seguente istruzione.

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

Puoi revocare questo privilegio eseguendo la seguente istruzione.

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

### Sintassi per la funzione lambda\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Syntax"></a>

Invochi la funzione `lambda_sync` in modo sincrono con il tipo di chiamata `RequestResponse`. La funzione restituisce il risultato della chiamata Lambda in un payload JSON. La funzione ha la seguente sintassi.

```
lambda_sync (
  lambda_function_ARN,
  JSON_payload
)
```

### Parametri per la funzione lambda\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Parameters"></a>

La funzione `lambda_sync` include i seguenti parametri.

* lambda\$1function\$1ARN *  
Amazon Resource Name (ARN) della funzione Lambda da chiamare.

* JSON\$1payload *  
Il payload per la funzione Lambda chiamata in formato JSON.

**Nota**  
Aurora MySQL versione 3 supporta le funzioni di analisi JSON di MySQL 8.0. Tuttavia, Aurora MySQL versione 2 non include queste funzioni. L'analisi JSON non è richiesta quando una funzione Lambda restituisce un valore atomico, come un numero o una stringa.

### Esempio per la funzione lambda\$1sync
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Sync.Example"></a>

La seguente query basata su `lambda_sync` chiama la funzione Lambda `BasicTestLambda` in modo sincrono usando l'ARN della funzione. Il payload per la funzione è `{"operation": "ping"}`.

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

### Sintassi per la funzione lambda\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Syntax"></a>

Invochi la funzione `lambda_async` in modo asincrono con il tipo di chiamata `Event`. La funzione restituisce il risultato della chiamata Lambda in un payload JSON. La funzione ha la seguente sintassi.

```
lambda_async (
  lambda_function_ARN,
  JSON_payload
)
```

### Parametri per la funzione lambda\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Parameters"></a>

La funzione `lambda_async` include i seguenti parametri.

* lambda\$1function\$1ARN *  
Amazon Resource Name (ARN) della funzione Lambda da chiamare.

* JSON\$1payload *  
Il payload per la funzione Lambda chiamata in formato JSON.

**Nota**  
Aurora MySQL versione 3 supporta le funzioni di analisi JSON di MySQL 8.0. Tuttavia, Aurora MySQL versione 2 non include queste funzioni. L'analisi JSON non è richiesta quando una funzione Lambda restituisce un valore atomico, come un numero o una stringa.

### Esempio per la funzione lambda\$1async
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.Async.Example"></a>

La seguente query basata su `lambda_async` chiama la funzione Lambda `BasicTestLambda` in modo asincrono usando l'ARN della funzione. Il payload per la funzione è `{"operation": "ping"}`.

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

### Invocazione di una funzione Lambda all'interno di un trigger
<a name="AuroraMySQL.Integrating.NativeLambda.lambda_functions.trigger"></a>

Puoi utilizzare i trigger per chiamare Lambda sulle istruzioni di modifica dei dati. L'esempio seguente illustra come utilizzare la funzione `lambda_async` nativa e memorizzare il risultato in una variabile.

```
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 ;
```

**Nota**  
I trigger non vengono eseguiti una volta per istruzione SQL, ma una volta per riga modificata, una riga alla volta. Quando viene eseguito un trigger, il processo è sincrono. L'istruzione di modifica dei dati viene restituita solo al completamento del trigger.  
Fai attenzione quando richiami una AWS Lambda funzione dai trigger su tabelle che presentano un traffico di scrittura elevato. `INSERT`e `UPDATE` i `DELETE` trigger vengono attivati per riga. Un carico di lavoro che richiede molta scrittura su una tabella con `INSERT` o `DELETE` trigger genera un gran numero di chiamate alla funzione. `UPDATE` AWS Lambda 