Perché la mia funzione Lambda configurata con SQS non è richiamata come origine dell'evento?

5 minuti di lettura
0

Ho configurato la mia funzione AWS Lambda per elaborare i messaggi in una coda Amazon Simple Queue Service (Amazon SQS). Tuttavia, la mia funzione Lambda non viene richiamata e non elabora i messaggi in coda.

Risoluzione

Prerequisiti

  • Verifica che la funzione Lambda sia configurata con Amazon SQS come origine dell'evento.
  • Verifica che il ruolo AWS Identity and Access Management (IAM) della funzione Lambda disponga delle autorizzazioni necessarie per recuperare i messaggi dalla coda SQS.
  • Controlla i parametri di Amazon CloudWatch per la funzione per le chiamate e la coda SQS per confermare che ci sono messaggi disponibili nella coda. Se i messaggi non sono visibili o non vengono inviati alla coda SQS, assicurati che il produttore disponga delle autorizzazioni necessarie. L'utente o il ruolo deve disporre delle seguenti autorizzazioni Amazon SQS e AWS Key Management Service (AWS KMS):
    sqs:SendMessage
    kms:GenerateDataKey
    kms:Decrypt

Nota: Se la coda non è crittografata, non sono necessarie le autorizzazioni AWS KMS.

Verifica che la funzione Lambda e gli URL della coda SQS siano corretti

Verifica che il nome della risorsa Amazon (ARN) della funzione Lambda e l'URL della coda SQS nella mappatura dell'origine degli eventi relativi alla funzione Lambda siano corretti. Inoltre, attiva la mappatura della fonte degli eventi.

  1. Apri la console Lambda.
  2. Nel riquadro di navigazione, scegli Funzioni.
  3. Seleziona la funzione che desideri controllare.
  4. Scegli il trigger SQS ed espandilo per verificare che l'URL della coda SQS sia corretto. Inoltre, verifica che lo stato del trigger sia attivato. Per ulteriori informazioni, consulta Perché il mio trigger Amazon SQS Lambda è stato disabilitato?

Per effettuare questi controlli, puoi anche eseguire il comando list-event-source-mapping.

Esempio:

aws lambda list-event-source-mappings --function-name <my-function> --region <region-name>

Nota: Sostituisci <my-function> con il nome della funzione Lambda e sostituisci <region name> con la tua regione AWS.

Verifica le autorizzazioni della funzione Lambda

Se il ruolo Lambda IAM è autorizzato a interrogare i messaggi della coda SQS, controlla la policy di accesso della coda SQS. Cerca regole di negazione che potrebbero limitare la funzione Lambda.

  1. Apri la console Amazon SQS.
  2. Nel riquadro di navigazione, scegli Code.
  3. Seleziona la coda SQS, quindi scegli la scheda Policy di accesso.
  4. Esamina le politiche per eventuali policy di rifiuto che potrebbero bloccare il traffico Lambda. Se esiste una politica che blocca il traffico, aggiungi una condizione nell'istruzione deny per ignorare le richieste provenienti da Lambda.

La tua funzione Lambda IAM deve disporre delle seguenti autorizzazioni:

  • DeleteMessage
  • GetQueueAttributes
  • ReceiveMessage

Controlla le impostazioni di crittografia per la coda

Se la coda è crittografata, il ruolo IAM della funzione Lambda richiede le autorizzazioni per eseguire azioni AWS KMS. Senza le necessarie autorizzazioni, la funzione Lambda non può consumare messaggi della coda SQS. Se la coda Amazon SQS è configurata con la crittografia AWS KMS, completa le seguenti attività:

  • Assicurati che la chiave AWS KMS esista.
  • Assicurati che il ruolo della funzione Lambda disponga delle autorizzazioni kms:Decrypt.
  • Assicurati che le autorizzazioni delle policy della chiave AWS KMS siano configurate per consentire azioni dal ruolo Lambda.

Nota: Le code Amazon SQS con la chiave predefinita (chiave AWS KMS per Amazon SQS) non possono richiamare una funzione Lambda in un altro account AWS.

Controlla se la funzione Lambda specifica è limitata

Lambda presenta un limite di simultaneità regionale. Se altre funzioni della regione AWS utilizzano attivamente questa capacità al massimo, è possibile che si verifichino delle limitazioni della funzione. Ciò può accadere anche se la funzione stessa non raggiunge la capacità massima.

Se si imposta una concorrenza riservata su 0 per la funzione, non verrà eseguita alcuna chiamata sulla funzione. Tutti i messaggi provenienti da Amazon SQS sono limitati. Controlla la metrica regionale ConcurrentExecutions (massima) e le metriche Throttle (SUM) della funzione in Amazon CloudWatch. Verifica se la capacità regionale è stata raggiunta e se la funzione presenta delle limitazioni. Assicurati che ci sia una capacità sufficiente per richiamare la funzione ed elaborare i messaggi SQS.

Verifica che non vi siano altri utenti attivi nella stessa coda SQS

Se nella coda SQS è presente più di un cliente attivo, i tuoi messaggi potrebbero venire consumati da questi clienti. I messaggi SQS sono progettati per essere consumati da un solo cliente alla volta. Se un altro cliente sta utilizzando la coda SQS, la funzione Lambda potrebbe non ricevere alcun messaggio quando interroga la coda SQS. Usa la console Amazon SQS per verificare che non ci siano altre invocazioni Lambda o Amazon SQS attive.

Nota: Altri clienti potrebbero estrarre messaggi dalla coda SQS a livello di codice. Queste estrazioni non vengono visualizzate nella console.

Controlla se l'origine degli eventi SQS è configurata con filtri

Controlla se l'origine degli eventi SQS è configurata con dei filtri. Se la tua fonte di eventi SQS ha dei filtri configurati, assicurati di non filtrare alcun messaggio Amazon SQS.

  1. Apri la console Lambda.
  2. Nel riquadro di navigazione, scegli Funzioni.
  3. Seleziona la funzione che desideri controllare.
  4. Scegli il trigger SQS, quindi verifica i criteri di filtro. Se la configurazione del trigger non mostra il nome della chiave, non è configurato alcun filtro. Se è configurato un criterio di filtro, controlla il filtro per confermare che consenta a Lambda di elaborare messaggi validi. Per rimuovere temporaneamente i criteri di filtro, scegli Modifica.
  5. Se la funzione viene richiamata dopo aver rimosso il filtro, modifica i criteri di filtro in base al caso d'uso.

Per ulteriori informazioni, consulta Filtrare con Amazon SQS e Best practice per implementare il filtro di eventi Lambda.

Informazioni correlate

Utilizzo di Lambda con Amazon SQS

Perché la mia funzione Lambda con una sorgente di eventi Amazon SQS non è scalabile in modo ottimale?

Perché la mia funzione Lambda riprova a inviare i messaggi Amazon SQS validi e li inserisce nella mia coda DLQ?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa