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à.
Tutorial: utilizzo di una coda Amazon SQS tra più account come origine eventi
In questo tutorial, crei una funzione Lambda che consuma i messaggi da una coda Amazon Simple Queue Service (Amazon SQS) in un account diverso. AWS Questo tutorial include due AWS account: l'account A si riferisce all'account che contiene la funzione Lambda e l'account B si riferisce all'account che contiene la coda Amazon SQS.
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 (account A)
Nell'Account A, crea un ruolo di esecuzione che autorizzi la funzione ad accedere alle AWS risorse richieste.
Creazione di un ruolo di esecuzione
-
Apri la pagina Ruoli
nella console AWS Identity and Access Management (IAM). -
Scegliere Crea ruolo.
-
Creare un ruolo con le seguenti proprietà.
-
Entità attendibile – AWS Lambda
-
Autorizzazioni: AWSLambdaSQSQueueExecutionRole
-
Nome ruolo –
cross-account-lambda-sqs-role
-
La AWSLambdaSQSQueueExecutionRolepolicy dispone delle autorizzazioni necessarie alla funzione per leggere elementi da Amazon SQS e scrivere log su Amazon Logs. CloudWatch
Creazione della funzione (account A)
In Account A, crea una funzione Lambda che elabora i messaggi Amazon SQS. La funzione Lambda e la coda Amazon SQS devono trovarsi nella stessa Regione AWS.
Il seguente esempio di codice Node.js scrive ogni messaggio in un log in Logs. CloudWatch
Esempio index.mjs
export const handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
Creazione della funzione
Nota
Seguendo questi passaggi viene creata una funzione Node.js. Per le altre lingue i passaggi sono simili, ma alcuni dettagli sono diversi.
-
Salva l'esempio di codice come un file denominato
index.mjs
. -
Crea un pacchetto di implementazione.
zip function.zip index.mjs
-
Create la funzione utilizzando il comando
create-function
AWS Command Line Interface (AWS CLI). Sostituisciarn:aws:iam::111122223333:role/cross-account-lambda-sqs-role
con l'ARN del ruolo di esecuzione creato in precedenza.aws lambda create-function --function-name CrossAccountSQSExample \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs22.x \ --role
arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role
Testa la funzione (Account A)
Nell'Account A, verifica manualmente la tua funzione Lambda utilizzando il invoke
AWS CLI
comando e un evento Amazon SQS di esempio.
Se il gestore termina normalmente senza eccezioni, Lambda considera il messaggio come 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.
-
Salva il seguente JSON come un file denominato
input.txt
.{ "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:example-queue", "awsRegion": "us-east-1" } ] }
Il precedente JSON simula un evento che Amazon SQS potrebbe inviare alla tua funzione Lambda, dove
"body"
contiene il messaggio effettivo dalla coda. -
Eseguire il seguente comando
invoke
AWS CLI .aws lambda invoke --function-name CrossAccountSQSExample \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt
L'cli-binary-formatopzione è obbligatoria se utilizzi 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. -
Verificare l'output nel file
outputfile.txt
.
Creazione di una coda Amazon SQS (account B)
In Account B, crea una coda Amazon SQS che la funzione Lambda in Account A 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.
-
Crea una coda con le seguenti proprietà.
-
Type (Tipo): Standard
-
Nome: LambdaCrossAccountQueue
-
Configuration (Configurazione): mantieni le impostazioni predefinite.
-
Access policy (Policy di accesso): scegli Advanced (Avanzata). Incolla la seguente politica JSON. Sostituisci i valori seguenti:
111122223333
: Account AWS ID per l'account A444455556666
: Account AWS ID per l'account B
Questa policy concede al ruolo di esecuzione Lambda nell'Account A le autorizzazioni per utilizzare i messaggi provenienti da questa coda Amazon SQS.
-
-
Dopo aver creato la coda, registra il suo Amazon Resource Name (ARN). Questa operazione è necessaria nella fase successiva quando si associa la coda alla funzione Lambda.
Configurazione dell'origine eventi (account A)
Nell'Account A, crea una mappatura dell'origine degli eventi tra la coda Amazon SQS nell'Account B e la tua funzione Lambda eseguendo il comando seguente. create-event-source-mapping
AWS CLI
Sostituisci arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue
con l'ARN della coda Amazon SQS creata nel passaggio precedente.
aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:
444455556666
:LambdaCrossAccountQueue
È possibile ottenere un elenco delle mappature delle fonti eventi eseguendo il comando riportato di seguito.
aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \ --event-source-arn arn:aws:sqs:us-east-1:
444455556666
:LambdaCrossAccountQueue
Eseguire il test della configurazione
A questo punto è possibile eseguire il test della configurazione come indicato di seguito:
-
Nell'Account B, apri Console Amazon SQS
. -
Scegli LambdaCrossAccountQueue, che hai creato in precedenza.
-
Scegli Invia e ricevi messaggi.
-
In Corpo del messaggio, inserisci un messaggio di prova.
-
Scegliere Send Message (Invia messaggio).
La funzione Lambda nell'Account A dovrebbe ricevere il messaggio. Lambda continuerà a eseguire 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. La tua funzione viene eseguita e crea registri in Amazon CloudWatch. Puoi visualizzare i log nella console CloudWatch
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 carico. Account AWS
Nell'Account A elimina il ruolo di esecuzione e la funzione Lambda.
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).
Nell'Account B elimina la coda Amazon SQS.
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).