2016-11-02 29 views
3

我目前正在探索存儲電子郵件的附件與.eml文件本身分開。我有一個SES規則集,可將入站電子郵件發送到存儲桶。當存儲桶檢索電子郵件時,S3 Put Lambda函數解析原始電子郵件(MIME格式),base64解碼附件緩衝區,併爲每個附件和原始.eml文件執行putObject到新的存儲桶。Lambda S3 Put功能不會觸發更大的文件

我的問題是,此Lambda函數不會觸發附件超過〜3-4 MB的電子郵件。電子郵件被接收並存儲在初始桶中,但該功能在收到時不會觸發。此外,該事件不會出現在CloudWatch中。但是,使用硬編碼的S3 Put有效負載手動測試時,以及手動將.eml文件手動上傳到指定的存儲桶時,該功能可以完美地工作。

你知道爲什麼會有這個限制嗎?也許這是存儲桶的權限問題,或者是分配的Lambda角色的問題?手動測試時,我發現這絕不是超時或超過最大內存使用問題。

+0

可能出現[可能S3通知SQS失敗?](http://stackoverflow.com/q/30044185/1695906)。表面上不完全相同 - 但是相同的可能的根本原因,所以目前,我要說它不是完全重複的。我寧願看到一些共識,而不是隨便把我的黃金笨重的錘子吊起來。 –

+0

@ Michael-sqlbot我不會將此問題標記爲重複項,因爲我不會期望任何人在搜索此問題時發現其他問題。這個問題的標題太模糊了,以至於有人在遇到這個問題時找到它。 –

+0

謝謝@MarkB。我懷疑你是對的。 –

回答

8

較大的文件幾乎肯定是通過S3 Multipart Upload上傳的,而不是常規的Put操作。您需要配置您的Lambda訂閱以通知分段上傳。這聽起來像該功能目前只訂閱了s3:ObjectCreated:Put事件,並且您需要將s3:ObjectCreated:CompleteMultipartUpload添加到配置中。

1

我面臨同樣的問題。如果上傳到S3的文件的Etag以連字符後跟一個數字結尾,則表示該文件使用Multipart上傳。訂閱CompleteMultipartUpload事件解決了問題。