2016-11-02 2 views
3

J'explore actuellement le stockage des pièces jointes d'un email séparément du fichier .eml lui-même. J'ai un ensemble de règles SES qui envoie un e-mail entrant à un compartiment. Lorsque le bucket récupère l'e-mail, une fonction S3 Put Lambda analyse l'e-mail brut (format MIME), base64 décode les tampons de pièces jointes et place un putObject pour chaque pièce jointe et le fichier .eml d'origine dans un nouveau compartiment.Lambda S3 La fonction Put ne déclenche pas pour les fichiers plus volumineux

Mon problème est que cette fonction Lambda ne se déclenche pas pour les e-mails avec des pièces jointes dépassant ~ 3-4 Mo. L'e-mail est reçu et stocké dans le compartiment initial, mais la fonction ne se déclenche pas lorsqu'elle est reçue. En outre, l'événement n'apparaît pas dans CloudWatch. Toutefois, la fonction fonctionne parfaitement lors du test manuel avec une charge S3 Put codée en dur, et également lors du téléchargement manuel d'un fichier .eml dans le compartiment affecté.

Avez-vous une idée de la raison de cette limitation? Peut-être est-ce un problème d'autorisation avec le compartiment ou peut-être un problème avec le rôle Lambda assigné? Lors d'un test manuel, j'ai trouvé qu'il ne s'agissait en aucun cas d'un dépassement de délai ou d'un dépassement de la mémoire maximale utilisée.

+0

Possible duplicata de [Est-il possible que les notifications S3 à SQS échouent?] (Http://stackoverflow.com/q/30044185/1695906). Pas exactement la même chose à la surface - mais la même cause sous-jacente probable, donc pour le moment, je vais dire que ce n'est pas une copie exacte. Je préférerais voir un consensus à ce sujet plutôt que de lancer mon marteau de dupe d'or autour de manière décontractée. –

+0

@ Michael-sqlbot Je ne signalerais pas cette question comme un doublon, car je n'aurais jamais attendu que quelqu'un trouve cette autre question en cherchant ce problème. Le titre de cette autre question est trop vague pour que quelqu'un puisse le trouver lorsque vous rencontrez ce problème. –

+0

Merci @ MarkB. Je suppose que tu as raison. –

Répondre

8

Les fichiers les plus volumineux sont presque certainement téléchargés via le téléchargement multipartie S3 au lieu d'une opération de mise normale. Vous devez configurer votre abonnement Lambda pour être également averti des mises en ligne multiparties. Il semble que la fonction ne soit actuellement abonnée qu'aux événements s3:ObjectCreated:Put, et vous devez ajouter s3:ObjectCreated:CompleteMultipartUpload à la configuration.

1

J'ai rencontré le même problème. Si l'Etag du fichier que vous avez téléchargé sur S3 se termine par un trait d'union suivi d'un nombre, il indique que le fichier a été téléchargé à l'aide de Multipart. L'abonnement à CompleteMultipartUpload Event a résolu le problème.