2
votes

Événements s3 manquants dans AWS SQS

J'ai une fonction AWS Lambda qui est censée être déclenchée par des messages de Simple Queue Service SQS. Ce SQS est censé recevoir une notification lorsqu'un nouveau fichier json est écrit dans mon compartiment s3, ou lorsque le fichier json existant dans le compartiment s3 est écrasé. Le type d'événement pour les deux cas est s3: ObjectCreated, et je vois que la notification pour les deux cas est mon SQS. Maintenant, le problème est qu'il y a assez fréquemment un nouveau fichier dans s3 (ou un fichier existant mis à jour dans s3), mais il n'y a pas de message correspondant dans sqs! Il manque tellement de fichiers et Lambda ne sait pas qu'ils doivent être traités. Dans Lambda, j'imprime tout le contenu de la charge utile SQS reçue dans le fichier journal, puis j'essaie de trouver ces fichiers manqués avec quelque chose comme aws --profile aaa logs filter-log-events --log-group-name / aws / lambda / name --start-time 1554357600000 --end-time 1554396561982 --filter-pattern "missing_file_name_pattern" mais ne trouve rien, ce qui signifie que l'événement s3: objectCreated n'a pas été généré pour ce fichier manquant. Existe-t-il des conditions qui empêchent les événements s3: objectCreated pour les fichiers s3 nouveaux / mis à jour? Y a-t-il un moyen de le réparer? Ou une solution de contournement, peut-être?


2 commentaires

Vous utilisez l'événement s3: ObjectCreated: * , n'est-ce pas?


Droite, s3: ObjectCreated: *


3 Réponses :


0
votes

Deux possibilités:

  1. Certains événements peuvent être retardés ou ne pas être envoyés du tout : "Les notifications d'événements Amazon S3 fournissent généralement des événements en quelques secondes, mais peuvent parfois prendre une minute ou plus. Dans de très rares occasions, des événements peuvent être perdus." , bien que ce soit très rare. / p>

  2. Vous avez une erreur et le lambda n'imprime pas ce que vous attendez lors du traitement de ce message / vous ne recherchez pas correctement le journal.

Vous devez également vous assurer sur SQS que tous les enregistrements ont été intégrés et traités avec succès.


3 commentaires

Oui, j'ai vu que «dans de très rares occasions, des événements pouvaient être perdus» et j'ai été amusé. Dans mon cas, c'est ~ 5% des fichiers sont manqués! C'est trop. Comment s'assurer sur SQS que tous les enregistrements ont été ingérés? Je ne trouve aucun journal associé à sqs sur AWS qui montrerait ce qui a été ingéré dans sqs. Juste une idée - si je crée 2 (ou 3) sqs avec les mêmes informations s3-relaed, y a-t-il une chance que les messages manqués dans le 1er sqs apparaissent dans le 2e ou 3e?


5%, c'est vraiment beaucoup. Vérifiez l'onglet de surveillance SQS. Vous voulez dire que le S3 enverra des événements à plus d'une seule file d'attente? Cela ne semble pas être une bonne solution - si vous êtes certain que 5% des événements ne sont pas envoyés, contactez le support AWS


Je suis donc probablement à la recherche de journaux d'événements s3, s'ils existent, pour voir si des événements s3: ObjectCreated ont été générés pour ces fichiers manquants. Ou c'est une de ces "très rares occasions" où "des événements pourraient être perdus" - auquel cas je n'ai aucune idée de ce qu'il faut faire.



1
votes

Selon la documentation AWS:

Si deux écritures sont effectuées simultanément sur un même objet non versionné, il est possible qu'une seule notification d'événement soit envoyée. Si vous souhaitez vous assurer qu'une notification d'événement est envoyée pour chaque écriture réussie, vous pouvez activer le contrôle de version sur votre compartiment. Avec la gestion des versions, chaque écriture réussie créera une nouvelle version de votre objet et enverra également une notification d'événement.

https://docs.aws.amazon.com/AmazonS3 /latest/dev/NotificationHowTo.html

Aussi, pourquoi ne pas déclencher directement lambda depuis S3?


0 commentaires

0
votes

Assurez-vous que tous les événements de création d'objet sont cochés comme déclencheur.

J'ai rencontré un problème où des fichiers> 8 Mo étaient téléchargés sous forme de téléchargements en plusieurs parties qui sont répertoriés comme un autre déclencheur séparément du déclencheur PUT.


0 commentaires