2016-11-02 3 views
3

현재 .eml 파일과 별도로 전자 메일 첨부 파일을 저장하려고합니다. 버킷에 인바운드 전자 메일을 전달하는 SES 규칙 집합이 있습니다. 버킷이 전자 메일을 검색 할 때 S3 Put Lambda 함수는 원시 전자 메일 (MIME 형식)을 구문 분석하고, base64는 첨부 파일 버퍼를 디코딩하고, 각 첨부 파일에 대한 putObject와 원본 .eml 파일을 새 버킷으로 처리합니다.큰 파일에 대해 Lambda S3 Put 함수가 트리거되지 않음

제 문제는이 람다 기능이 첨부 파일이 ~ 3 ~ 4MB를 초과하는 이메일에는 트리거되지 않는다는 것입니다. 전자 메일은 수신되어 초기 버킷에 저장되지만 함수가 수신 될 때 트리거되지 않습니다. 또한 CloudWatch에는 이벤트가 표시되지 않습니다. 그러나이 기능은 하드 코드 된 S3 Put 페이로드로 수동 테스트 할 때와 .eml 파일을 할당 된 버킷에 수동으로 업로드 할 때 완벽하게 작동합니다.

왜 이런 제한이 있습니까? 아마도 이것은 양동이 사용 권한 문제이거나 할당 된 람다 역할 문제 일 수 있습니다. 수동으로 테스트했을 때 이것이 시간 초과 또는 최대 메모리 사용 문제를 초과하지 않음을 발견했습니다.

+0

가능한 [S3 알림을 SQS에 보낼 수 있습니까?] (http://stackoverflow.com/q/30044185/1695906). 표면에서 똑같은 것은 아닙니다. 그러나 그럴 가능성이있는 근본적인 원인은, 잠시 동안, 나는 정확한 복제본이 아니라고 말할 것입니다. 나는 골칫 덩어리 망치를 아무렇지도 않게 던지기보다는 그것을 공감대로보기를 좋아한다. –

+0

@ Michael-sqlbot이 문제를 검색하는 동안 누구도 다른 질문을 찾지 못했기 때문에 나는이 질문을 복제본으로 표시하지 않을 것입니다. 그 다른 질문의 제목은 누군가가이 문제를 겪고있을 때 그것을 발견하기에는 너무 모호합니다. –

+0

고마워요 @ MarkB. 네가 맞다고 생각해. –

답변

8

정기적 인 Put 작업 대신 S3 Multipart Upload를 통해 대용량 파일을 업로드하는 것이 거의 확실합니다. Multipart 업로드 알림을 받도록 Lambda 구독을 구성해야합니다. 함수가 현재 s3:ObjectCreated:Put 이벤트에만 가입되어있는 것처럼 들리며 s3:ObjectCreated:CompleteMultipartUpload을 구성에 추가해야합니다.

1

나는 동일한 문제에 직면했다. S3에 업로드 한 파일의 Etag가 하이픈 다음에 숫자가 오면 그 파일은 Multipart를 사용하여 업로드되었음을 나타냅니다. CompleteMultipartUpload 이벤트 구독으로 문제가 해결되었습니다.