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
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 MySQL.
Puoi chiamare una funzione AWS Lambda da un cluster DB Aurora MySQL utilizzando le funzioni native lambda_sync e 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.
Indice
Utilizzo delle funzioni native per chiamare una funzione Lambda
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
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 TOuser@domain-or-ip-address
Si può revocare questo ruolo eseguendo la seguente istruzione.
REVOKE AWS_LAMBDA_ACCESS FROMuser@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 o role_nameSET ROLE
ALL. Se non si ha familiarità con il sistema dei ruoli MySQL 8.0, è possibile ottenere ulteriori informazioni in Privilegio basato sui ruoli. Per maggiori dettagli, consulta la pagina Using roles
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
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_all_roles_on_login
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
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 *.* TOuser@domain-or-ip-address
Puoi revocare questo privilegio eseguendo la seguente istruzione.
REVOKE INVOKE LAMBDA ON *.* FROMuser@domain-or-ip-address
Sintassi per la funzione lambda_sync
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_sync
La funzione lambda_sync include i seguenti parametri.
- lambda_function_ARN
-
Amazon Resource Name (ARN) della funzione Lambda da chiamare.
- JSON_payload
-
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_sync
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_async
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_async
La funzione lambda_async include i seguenti parametri.
- lambda_function_ARN
-
Amazon Resource Name (ARN) della funzione Lambda da chiamare.
- JSON_payload
-
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_async
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
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.
Prestare attenzione quando si richiama una funzione AWS Lambda dai trigger sulle tabelle che hanno un elevato traffico di scrittura. Per ciascuna riga vengono attivati i trigger INSERT, UPDATE e DELETE. 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.