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à.
In questo tutorial creerai una funzione Lambda che utilizza messaggi da una coda di Amazon Simple Queue Service (Amazon SQS). La funzione Lambda viene eseguita ogni volta che viene aggiunto un nuovo messaggio alla coda. La funzione scrive i messaggi in un flusso Amazon CloudWatch Logs. Il seguente diagramma illustra le risorse AWS utilizzate per completare il tutorial.

Per completare questo tutorial, completa le seguenti attività:
-
Crea una funzione Lambda che scriva CloudWatch messaggi nei registri.
-
Creare una coda Amazon SQS.
-
Crea una mappatura dell'origine degli eventi Lambda. La mappatura dell'origine degli eventi legge la coda di Amazon SQS e richiama la funzione Lambda quando viene aggiunto un nuovo messaggio.
-
Verifica la configurazione aggiungendo messaggi alla coda e monitorando i risultati in Logs. CloudWatch
Prerequisiti
Se non l'hai ancora installato AWS Command Line Interface, segui i passaggi indicati in Installazione o aggiornamento della versione più recente di AWS CLI per installarlo.
Per eseguire i comandi nel tutorial, sono necessari un terminale a riga di comando o una shell (interprete di comandi). In Linux e macOS, utilizza la shell (interprete di comandi) e il gestore pacchetti preferiti.
Nota
Su Windows, alcuni comandi della CLI Bash utilizzati comunemente con Lambda (ad esempio, zip
) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una versione integrata su Windows di Ubuntu e Bash, installa il sottosistema Windows per Linux
Creazione del ruolo di esecuzione

Un ruolo di esecuzione è un ruolo AWS Identity and Access Management (IAM) che concede a una funzione Lambda l'autorizzazione all' Servizi AWS accesso e alle risorse. Per consentire alla tua funzione di leggere articoli da Amazon SQS, allega la politica di AWSLambdaSQSQueueExecutionRoleautorizzazione.
Creazione di un ruolo di esecuzione e collegamento di una policy di autorizzazione Amazon SQS personalizzata
-
Aprire la pagina Roles (Ruoli)
della console IAM. -
Scegliere Create role (Crea ruolo).
-
Per Tipo di entità attendibile, scegli Servizio AWS .
-
In Caso d'uso, scegli Lambda.
-
Scegli Next (Successivo).
-
Nella casella di ricerca Policy di autorizzazione, inserisci
AWSLambdaSQSQueueExecutionRole
. -
Seleziona la AWSLambdaSQSQueueExecutionRolepolitica, quindi scegli Avanti.
-
In Dettagli del ruolo, per Nome del ruolo inserisci
lambda-sqs-role
, quindi scegli Crea ruolo.
Dopo la creazione del ruolo, prendi nota del valore del nome della risorsa Amazon (ARN) del ruolo di esecuzione. Ne avrai bisogno nelle fasi successive.
Creazione della funzione

Crea una funzione Lambda che elabora i messaggi Amazon SQS. Il codice della funzione registra il corpo del messaggio CloudWatch Amazon SQS in Logs.
Questo tutorial utilizza il runtime Node.js 18.x, ma è fornito anche un codice di esempio in altri linguaggi di runtime. Per visualizzare il codice per il runtime che ti interessa, seleziona la scheda corrispondente nella casella seguente. Il JavaScript codice che utilizzerai in questo passaggio si trova nel primo esempio mostrato nella scheda. JavaScript
- SDK per .NET
-
Nota
C'è altro su GitHub. Trova l'esempio completo e scopri come eseguire la configurazione e l'esecuzione nel repository di Esempi serverless
. Utilizzo di un evento SQS con Lambda tramite .NET.
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using Amazon.Lambda.Core; using Amazon.Lambda.SQSEvents; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace SqsIntegrationSampleCode { public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context) { foreach (var message in evnt.Records) { await ProcessMessageAsync(message, context); } context.Logger.LogInformation("done"); } private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context) { try { context.Logger.LogInformation($"Processed message {message.Body}"); // TODO: Do interesting work based on the new message await Task.CompletedTask; } catch (Exception e) { //You can use Dead Letter Queue to handle failures. By configuring a Lambda DLQ. context.Logger.LogError($"An error occurred"); throw; } } }
Creazione di una funzione Lambda in Node.js
-
Crea una directory per il progetto, quindi passa a quella directory.
mkdir sqs-tutorial cd sqs-tutorial
-
Copia il JavaScript codice di esempio in un nuovo file denominato
index.js
. -
Crea un pacchetto di implementazione utilizzando il seguente comando
zip
.zip function.zip index.js
-
Crea una funzione Lambda utilizzando il comando create-function
della AWS CLI . Per il role
parametro, immettere l'ARN del ruolo di esecuzione creato in precedenza.Nota
La funzione Lambda e la coda Amazon SQS devono trovarsi nella stessa Regione AWS.
aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \
--role arn:aws:iam::
111122223333
:role/lambda-sqs-role
Test della funzione

Richiama la funzione Lambda manualmente utilizzando invoke
AWS CLI il comando e un evento Amazon SQS di esempio.
Invocazione della funzione Lambda con un evento di esempio
-
Salva il seguente JSON come un file denominato
input.json
. Questo JSON simula un evento che Amazon SQS potrebbe inviare alla tua funzione Lambda, dove"body"
contiene il messaggio effettivo dalla coda. In questo esempio, il messaggio è"test"
.Esempio Evento Amazon SQS
Questo è un evento di test: non è necessario modificare il messaggio o il numero di account.
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:my-queue", "awsRegion": "us-east-1" } ] }
-
Esegui il seguente comando invoke.
AWS CLI Questo comando restituisce CloudWatch i log nella risposta. Per ulteriori informazioni sul recupero di oggetti, consulta Accedi ai log con AWS CLI. aws lambda invoke --function-name ProcessSQSRecord --payload file://input.json out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
L'cli-binary-formatopzione è obbligatoria se si utilizza la AWS CLI versione 2. Per rendere questa impostazione come predefinita, esegui
aws configure set cli-binary-format raw-in-base64-out
. Per ulteriori informazioni, consulta la pagina AWS CLI supported global command line options nella Guida per l'utente di AWS Command Line Interface versione 2. -
Individua il log
INFO
nella risposta. È qui che la funzione Lambda registra il corpo del messaggio. I log visualizzati dovrebbero essere di questo tipo:2023-09-11T22:45:04.271Z 348529ce-2211-4222-9099-59d07d837b60 INFO Processed message test 2023-09-11T22:45:04.288Z 348529ce-2211-4222-9099-59d07d837b60 INFO done
Creazione di una coda Amazon SQS

Creare una coda Amazon SQS che la funzione Lambda può utilizzare come origine eventi. La funzione Lambda e la coda Amazon SQS devono trovarsi nella stessa Regione AWS.
Per creare una coda
-
Apri la console Amazon SQS
. -
Scegliere Crea coda.
-
Inserisci un nome per la coda. Lascia tutte le altre proprietà sui valori predefiniti.
-
Scegliere Crea coda.
Dopo aver creato la coda, prendi nota del suo ARN. Questa operazione è necessaria nella fase successiva quando si associa la coda alla funzione Lambda.
Configurazione dell'origine eventi

Collega la coda Amazon SQS alla tua funzione Lambda creando una mappatura dell'origine degli eventi. La mappatura dell'origine degli eventi legge la coda di Amazon SQS e richiama la funzione Lambda quando viene aggiunto un nuovo messaggio.
Per creare una mappatura tra la coda Amazon SQS e la funzione Lambda, usa il comando. create-event-source-mapping
aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:
us-east-1:111122223333:my-queue
Per ottenere un elenco delle mappature delle sorgenti degli eventi, usa il comando. list-event-source-mappings
aws lambda list-event-source-mappings --function-name ProcessSQSRecord
Invio di un messaggio di test

Invio di un messaggio Amazon SQS alla funzione Lambda
-
Apri la console Amazon SQS
. -
Scegli la coda creata in precedenza.
-
Scegli Invia e ricevi messaggi.
-
Nella sezione Corpo del messaggio, inserisci un messaggio di test, ad esempio "questo è un messaggio di prova".
-
Scegliere Invia messaggio.
Lambda esegue il polling della coda per gli aggiornamenti. Quando c'è un nuovo messaggio, Lambda richiama la tua funzione con questi nuovi dati di evento dalla coda. Se il gestore della funzione conclude senza eccezioni, Lambda considera il messaggio elaborato correttamente e inizia a leggere nuovi messaggi nella coda. Dopo aver elaborato correttamente un messaggio, Lambda lo elimina automaticamente dalla coda. Se il gestore genera un'eccezione, Lambda considera il batch dei messaggi come non correttamente elaborato e Lambda richiama la funzione con lo stesso batch di messaggi.
Controllate i log CloudWatch

Verifica della corretta elaborazione del messaggio da parte della funzione
Aprire la pagina Funzioni
della console Lambda. -
Scegli la SQSRecord funzione Process.
-
Scegli Monitor (Monitoraggio).
-
Scegli Visualizza CloudWatch registri.
-
Nella CloudWatch console, scegli il flusso di log per la funzione.
-
Individua il log
INFO
. È qui che la funzione Lambda registra il corpo del messaggio. Dovresti vedere il messaggio che hai inviato dalla coda Amazon SQS. Esempio:2023-09-11T22:49:12.730Z b0c41e9c-0556-5a8b-af83-43e59efeec71 INFO
Processed message this is a test message.
Pulizia delle risorse
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili a tuo Account AWS carico.
Come eliminare il ruolo di esecuzione
-
Aprire la pagina Ruoli
della console IAM. -
Selezionare il ruolo di esecuzione creato.
-
Scegliere Elimina.
-
Inserisci il nome del ruolo nel campo di immissione testo e seleziona Delete (Elimina).
Per eliminare la funzione Lambda
-
Aprire la pagina Functions (Funzioni)
della console Lambda. -
Selezionare la funzione creata.
-
Scegliere Operazioni, Elimina.
-
Digita
confirm
nel campo di immissione testo e scegli Delete (Elimina).
Per eliminare la coda Amazon SQS
-
Accedi AWS Management Console e apri la console Amazon SQS all'indirizzo. https://console.aws.amazon.com/sqs/
-
Selezionare la coda creata.
-
Scegliere Delete (Elimina).
-
Inserisci
confirm
nel campo di immissione del testo. -
Scegli Delete (Elimina).