Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Perché Amazon SNS non richiama la mia funzione Lambda quando viene attivata da un allarme CloudWatch?
Desidero che Amazon Simple Notification Service (Amazon SNS) richiami la mia funzione AWS Lambda quando viene attivata da un allarme Amazon CloudWatch.
Breve descrizione
I seguenti scenari ti impediscono di richiamare la tua funzione Lambda:
- La policy delle risorse della tua funzione Lambda non ha concesso l'accesso per richiamare la funzione dall'argomento SNS. Per questo scenario, completa i passaggi descritti nella sezione Verifica il documento di policy basato sulle risorse per la tua funzione Lambda.
- Le chiamate alla funzione Lambda sono ritardate. Per questo scenario, completa i passaggi descritti nella sezione Verifica i log di consegna di Amazon SNS.
Nota: la risoluzione presuppone che tu possa chiamare l'API Pubblica sull'argomento SNS, ma si verificano errori tra Amazon SNS e l'integrazione Lambda. Se non riesci a visualizzare alcuna attività sul tuo argomento SNS, consulta la sezione Why doesn't Amazon SNS invoke my Lambda function when triggered by a CloudWatch alarm? Tale attività può includere i seguenti parametri di CloudWatch: NumberOfMessagesPublished, NumberOfNotificationsDelivered o NumberOfNotificationsFailed
Risoluzione
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risolvi gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Consulta il documento di policy basato sulle risorse per la tua funzione Lambda
Quando Amazon SNS richiama una funzione Lambda in modo asincrono, Lambda restituisce ad Amazon SNS un codice di stato HTTP 202. Il codice di stato indica che Lambda ha accettato il messaggio per una successiva elaborazione. Per ulteriori informazioni, consulta la sezione Invocazione asincrona. Se ricevi una risposta non riuscita, controlla i log di consegna di Amazon SNS per ulteriori informazioni.
Scegli una risoluzione in base allo scenario del tuo account.
Se l'argomento SNS e la funzione Lambda sono nello stesso account:
1. Apri la console Lambda.
2. Nel pannello di navigazione, scegli Funzioni, quindi scegli la tua funzione.
3. Seleziona la scheda Configurazione, quindi scegli Autorizzazioni.
4. Nella sezione Policy basata sulle risorse, scegli l'istruzione di policy dalla colonna ID istruzione per visualizzare il documento di policy. Verrà visualizzato il seguente documento di policy:
statement id your-statement-id principal: sns.amazonaws.com effect allow action Lambda:InvokeFunction conditions { "arnlike": { "aws:sourcearn": "arn:aws:sns:your-aws-region:your-aws-account-id:your-sns-topic-name" }
Nota: per visualizzare il documento di policy in JSON, scegli Visualizza documento di policy nella sezione Policy basata sulle risorse.
Se ti manca la policy delle risorse Lambda che concede ad Amazon SNS l'accesso per richiamare la funzione, aggiungi la seguente funzione al documento di policy. Usa la console Lambda o l'interfaccia AWS CLI o AWS CloudShell.
Usa la linea di comando come mostrato di seguito:
aws lambda add-permission \ --function-name your-lambda-function-name \ --statement-id triggerfromsns-statement-id \ --action lambda:invokefunction \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:your-aws-region:your-aws-account-id:your-sns-topic-name
Nota: sostituisci your-lambda-function-name, your-aws-region, your-aws-account-id e your-sns-topic-name con i tuoi valori. Il comando AWS CLI utilizza la Regione AWS predefinita. Se la tua funzione Lambda si trova in una regione diversa, puoi sovrascrivere la regione predefinita con il flag --region.
Usa la console Lambda come mostrato di seguito:
1. Apri la console Lambda.
2. Nel pannello di navigazione, scegli Funzioni, quindi scegli la tua funzione.
3. Seleziona la scheda Configurazione, quindi scegli Autorizzazioni.
4. Nella sezione Policy basata sulle risorse, scegli Aggiungi autorizzazioni.
5. In Principale, seleziona sns.amazonaws.com.
6. In Azioni, seleziona Lambda:InvokeFunction.
7. In ID istruzione inserisci un ID univoco.
8. Scegli Salva.
Se l'argomento SNS e la funzione Lambda si trovano in account diversi:
1. Configura le autorizzazioni multi-account..
2. Nei tuoi log di CloudWatch, utilizza la registrazione dello stato della consegna per verificare che Amazon SNS abbia inviato correttamente un messaggio a Lambda o il parametro NumberOfNotificationsDelivered di CloudWatch.
Esempio di risposta andata a buon fine tra Amazon SNS e Lambda:
{ "notification": { "messagemd5sum": "your-md5-sum", "messageid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "topicarn": "arn:aws:sns:your-aws-region:your-aws-account-id:your-sns-topic", "timestamp": "2021-04-04 14:08:48.083" }, "delivery": { "deliveryid": "your-sns-delivery-id", "destination": "arn:aws:lambda:your-aws-region:your-aws-account-id:function:your-function-name", "providerresponse": "{\ "lambdarequestid\":\ "your-lambda-request-id\"}", "dwelltimems": 92, "attempts": 1, "statuscode": 202 }, "status": "success" }
Controlla i log di consegna di Amazon SNS
Controlla i log di consegna del tuo argomento SNS alla funzione Lambda. Se la risposta ha esito positivo, verrà visualizzato un codice di stato 202.
Per visualizzare i log di CloudWatch relativi al tuo argomento SNS, procedi come segue:
1. Apri la console CloudWatch.
2. Nel pannello di navigazione, scegli Log, quindi scegli Gruppi di log.
3. Nella casella di ricerca con filtro, inserisci il nome del tuo argomento SNS. Verranno visualizzati due gruppi di log per l'argomento SNS: uno per le operazioni riuscite e uno per le operazioni non andate a buon fine.
4. Scegli il gruppo di log delle operazioni riuscite.
5. Nella sezione Flussi di log, scegli Cerca tutto.
Nota: puoi anche controllare il timestamp della richiesta nella colonna Ora ultimo evento. Quindi, cerca l'Amazon Resource Name (ARN) e il nome della funzione Lambda.
6. Dalla colonna Flusso di log, scegli il flusso di log per aprirlo.
Se non vedi alcun risultato, procedi come segue:
1. Scegli Gruppi di log, quindi scegli i gruppi di log delle operazioni non riuscite.
2. Nella sezione Flussi di log, scegli Cerca tutto.
3. Dalla colonna Flusso di log, scegli il flusso di log per aprirlo.
Per risolvere i problemi relativi ai gruppi di log delle operazioni non riuscite, procedi come segue:
1. Controlla se la traccia X-Ray della tua funzione Lambda ha un tempo di dimora elevato. In tal caso, utilizza la console CloudWatch per verificare che le tue funzioni Lambda in quella regione abbiano il minor numero di errori e limitazioni. Assicurati di selezionare tutte le funzioni, quindi seleziona i parametri Errori e Limitazioni.
Nota: la coda interna a Lambda può eseguire il backup quando centinaia di errori e limitazioni tra le funzioni vengono richiamati in modo asincrono. Questo backup può ritardare le invocazioni delle funzioni. È consigliabile mantenere la frequenza di errori e limitazioni al minimo per evitare ritardi indesiderati. Per ulteriori informazioni, consulta la sezione Invocazione asincrona.
2. Imposta una coda di destinazione Amazon Simple Queue Service (Amazon SQS) o una funzione Lambda per una gestione separata. Ciò impedirà la perdita di messaggi e viene fatto perché la durata massima degli eventi asincroni può essere di sei ore per una funzione Lambda.

Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- Come posso configurare un filtro di sottoscrizione CloudWatch per richiamare la mia funzione Lambda?AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 3 anni fa