AWS - Qual è la differenza tra l'impostazione di una coda messaggi non recapitabili su un abbonamento SNS o su una funzione Lambda?

Aug 24 2020

Qual è la differenza tra l'impostazione di una coda messaggi non recapitabili su un argomento SNS o su una funzione Lambda?

Mi chiedevo, perché se imposti il ​​DLQ sull'abbonamento SNS, il messaggio di abbonamento passerà a DLQ quando Lambda (l'abbonato) fallisce, giusto? Quindi in quello scenario l'impostazione del DLQ in questi due punti avrebbe lo stesso effetto?

Ho impostato un DLQ su un abbonamento a un argomento SNS e non è apparso "automaticamente" come DLQ nelle impostazioni dello schermo Lambda, quindi presumo che ci possa essere qualche differenza?

Rif. Coda messaggi non recapitabili SNS: https://docs.aws.amazon.com/sns/latest/dg/sns-dead-letter-queues.html

In generale, la consegna dei messaggi non riesce quando Amazon SNS non può accedere a un endpoint sottoscritto a causa di un errore lato client o lato server.

Rif. Coda messaggi non recapitabili Lambda: https://aws.amazon.com/about-aws/whats-new/2016/12/aws-lambda-supports-dead-letter-queues/

AWS Lambda scriverà l'oggetto evento che richiama la funzione Lambda su questo endpoint [DLQ] dopo che la politica di ripetizione dei tentativi standard (2 ulteriori tentativi in ​​caso di errore) è stata esaurita.

Lambda:

Abbonamento a SNS:

Risposte

2 ChrisWilliams Aug 24 2020 at 00:32

L'SNS DLQ è specifico per SNS, il vantaggio qui è che tiene conto anche degli errori del client come il servizio Lambda inattivo. Ciò garantirà che se il servizio Lambda è inattivo, i messaggi possono essere riprodotti in un secondo momento, mentre se il DLQ è collegato al Lambda, ciò rappresenterebbe un replay solo se il servizio è in esecuzione.

Tuttavia, come ho già detto, l'SNS DLQ è solo per le notifiche che provengono da SNS, mentre Lambda può supportare il DLQ da qualsiasi evento in arrivo. Ciò significa che se hai più argomenti SNS o un argomento SNS e alcune code SQS devi solo applicarlo al Lambda stesso.

Entrambi i servizi utilizzano SQS per i propri DLQ, quindi l'importazione / recupero da entrambi sarebbe identico. Se disponi di un DLQ su entrambi i servizi, sì, potresti ritrovarti con 2 copie dell'evento / notifica, tuttavia è improbabile che le otterrai entrambe poiché in teoria l'endpoint Lambda riconoscerebbe che SNS considererebbe inviato, questo allora è responsabilità di Lambdas aggiungere al DLQ se fallisce.