

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 procedura archiviata Aurora MySQL (obsoleto)
<a name="AuroraMySQL.Integrating.ProcLambda"></a>

È possibile richiamare una AWS Lambda funzione da un cluster Aurora MySQL DB chiamando la procedura. `mysql.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**
+ [Considerazioni sulle versioni Aurora MySQL](#AuroraMySQL.Integrating.ProcLambda.caveats)
+ [Utilizzo della procedura mysql.lambda\$1async per chiamare una funzione Lambda (obsoleto)](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async)
  + [Sintassi](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Syntax)
  + [Parameters](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Parameters)
  + [Esempi](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Examples)

## Considerazioni sulle versioni Aurora MySQL
<a name="AuroraMySQL.Integrating.ProcLambda.caveats"></a>

In Aurora MySQL versione 2 puoi utilizzare il metodo delle funzioni native anziché queste stored procedure per richiamare una funzione Lambda. Per ulteriori informazioni sulle funzioni native, consulta [Utilizzo delle funzioni native per chiamare una funzione Lambda](AuroraMySQL.Integrating.NativeLambda.md#AuroraMySQL.Integrating.NativeLambda.lambda_functions).

In Aurora MySQL versione 2, la stored procedure `mysql.lambda_async` non è più supportata. Ti consigliamo di utilizzare le funzioni Lambda native.

In Aurora MySQL versione 3, la procedura archiviata non è disponibile.

## Utilizzo della procedura mysql.lambda\$1async per chiamare una funzione Lambda (obsoleto)
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async"></a>

La procedura `mysql.lambda_async` è una stored procedure predefinita che chiama una funzione Lambda in modo asincrono. Per utilizzare questa procedura, l'utente del database deve avere il privilegio `EXECUTE` sulla stored procedure `mysql.lambda_async`.

### Sintassi
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Syntax"></a>

La procedura `mysql.lambda_async` ha la seguente sintassi.

```
CALL mysql.lambda_async (
  lambda_function_ARN,
  lambda_function_input
)
```

### Parameters
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Parameters"></a>

La procedura `mysql.lambda_async` include i seguenti parametri.

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

* lambda\$1function\$1input *  
La stringa di input in formato JSON per chiamare la funzione Lambda.

### Esempi
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Examples"></a>

Come best practice, ti consigliamo di inserire le chiamate alla procedura `mysql.lambda_async` in una procedura archiviata che può essere richiamata da origini diverse come trigger o codice client. Questo approccio può evitare problemi di resistenza non corrispondente e rendere più semplice per richiamare le funzioni Lambda. 

**Nota**  
Fai attenzione quando richiami una AWS Lambda funzione dai trigger su tabelle che presentano un traffico di scrittura elevato. `INSERT``UPDATE`, e i `DELETE` trigger vengono attivati per riga. Un carico di lavoro pesante in scrittura su una tabella con trigger `INSERT`, `UPDATE` e `DELETE` genera un numero elevato di chiamate alla funzione AWS Lambda .   
Sebbene le chiamate alla procedura `mysql.lambda_async` siano asincrone, i trigger sono sincroni. Un'istruzione che genera un numero elevato di attivazioni di trigger non attende il completamento della chiamata alla funzione AWS Lambda , ma attende il completamento dei trigger prima di restituire il controllo al client.

**Example Esempio: richiama una AWS Lambda funzione per inviare e-mail**  
Nell'esempio seguente viene creata una stored procedure che è possibile chiamare nel codice del database per inviare un'e-mail utilizzando una funzione Lambda.  
**AWS Lambda Funzione**  

```
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']
                }
            }
        }
    )
```
**Stored procedure**  

```
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 ;
```
**Chiama la stored procedure per chiamare la funzione AWS Lambda **  

```
mysql> call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
```

**Example Esempio: richiama una AWS Lambda funzione per pubblicare un evento da un trigger**  
Nell'esempio seguente viene creata una stored procedure che pubblica un evento utilizzando Amazon SNS. Il codice chiama la procedura da un trigger quando una riga viene aggiunta a una tabella.  
**AWS Lambda Funzione**  

```
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'
    )
```
**Stored procedure**  

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

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

```
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 ;
```
**Inserisci una riga nella tabella per attivare la notifica**  

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