View a markdown version of this page

Tutorial: utilizzo di una coda Amazon SQS tra più account come origine eventi - AWS Lambda

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 Lambda Event Function che utilizza 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 tua Lambda Event Function 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 Windows-integrated versione di Ubuntu e Bash, installa il sottosistema Windows per Linux.

Creazione del ruolo di esecuzione (account A)

Nell'Account A, create un ruolo di esecuzione che autorizzi la funzione ad accedere alle risorse richieste. AWS

Creazione di un ruolo di esecuzione
  1. Apri la pagina Ruoli nella console AWS Identity and Access Management (IAM).

  2. Scegliere Create role (Crea ruolo).

  3. 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

Crea la funzione evento (Account A)

Nell'Account A, crea una funzione evento Lambda che elabori i tuoi messaggi Amazon SQS. La funzione Lambda Event e la coda Amazon SQS devono trovarsi nella stessa posizione. Regione AWS

Il seguente esempio di Node.js codice 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 {}; }
Per creare la funzione Event
Nota

Seguendo questi passaggi viene creata una Node.js funzione. Per le altre lingue i passaggi sono simili, ma alcuni dettagli sono diversi.

  1. Salva l'esempio di codice come un file denominato index.mjs.

  2. Crea un pacchetto di implementazione.

    zip function.zip index.mjs
  3. Create la funzione utilizzando il comando create-function AWS Command Line Interface (AWS CLI). Sostituisci arn: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 nodejs24.x \ --role arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role

Verifica la funzione dell'evento (Account A)

Nell'Account A, verifica manualmente la tua funzione Lambda Event 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.

  1. 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 codice JSON precedente simula un evento che Amazon SQS potrebbe inviare alla tua Lambda Event Function, dove "body" contiene il messaggio effettivo dalla coda.

  2. 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 versione 2. AWS CLI 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.

  3. Verificare l'output nel file outputfile.txt.

Creazione di una coda Amazon SQS (account B)

Nell'Account B, crea una coda Amazon SQS che la funzione Lambda Event nell'Account A può utilizzare come origine di eventi. La funzione Lambda Event e la coda Amazon SQS devono trovarsi nella stessa posizione. Regione AWS

Come creare una coda
  1. Apri la console Amazon SQS.

  2. Scegliere Crea coda.

  3. 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 policy JSON. Sostituisci i valori seguenti:

      • 111122223333: Account AWS ID per l'account A

      • 444455556666: Account AWS ID per l'account B

      JSON
      { "Version":"2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [ { "Sid": "Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue" } ] }

      Questa policy concede al ruolo di esecuzione Lambda nell'Account A le autorizzazioni per utilizzare i messaggi provenienti da questa coda Amazon SQS.

  4. Dopo aver creato la coda, registra il suo Amazon Resource Name (ARN). Ne hai bisogno nel passaggio successivo quando associ la coda alla tua Lambda Event Function.

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 Lambda Event Function 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:

  1. Nell'Account B, apri Console Amazon SQS.

  2. Scegli LambdaCrossAccountQueue, che hai creato in precedenza.

  3. Scegli Invia e ricevi messaggi.

  4. In Corpo del messaggio, inserisci un messaggio di prova.

  5. Scegliere Send Message (Invia messaggio).

La tua funzione evento Lambda nell'account A dovrebbe ricevere il messaggio. Lambda continua a controllare la coda per verificare la presenza di 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, ripulisci il tuo ruolo di esecuzione e la funzione evento Lambda.

Come eliminare il ruolo di esecuzione
  1. Aprire la pagina Ruoli della console IAM.

  2. Selezionare il ruolo di esecuzione creato.

  3. Scegliere Elimina.

  4. Inserisci il nome del ruolo nel campo di immissione testo e seleziona Elimina.

Per eliminare la funzione evento Lambda
  1. Apri la pagina Event Functions della console Lambda.

  2. Seleziona la funzione di evento che hai creato.

  3. Scegliere Operazioni, Elimina.

  4. 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
  1. Accedi Console di gestione AWS e apri la console Amazon SQS all'indirizzo. https://console.aws.amazon.com/sqs/

  2. Selezionare la coda creata.

  3. Scegliere Elimina.

  4. Inserisci confirm nel campo di immissione del testo.

  5. Scegli Delete (Elimina).