2017-10-19 67 views
-1

我會需要一個星期發出大約200-300k電子郵件,我們的每週通訊。這個數字預計會隨着時間的推移而增加,這就是爲什麼我想讓lambda處理我們的縮放比例。發送帶有AWS拉姆達,SES,SQS,羣發郵件的sns

將有員工觸發這些電子郵件的發送UI。我最初的想法是將電子郵件地址列表添加到SNS主題,並使用lambda函數訂閱它以觸發實際發送的電子郵件。我讀過,這可能會導致一些意外的行爲,並不是追蹤錯誤的最佳選擇。

我們目前的限制是每秒90封電子郵件。結合執行lambda函數的最大時間爲5分鐘,讓我想知道如何分解它。我是否需要批量將這些內容發送給SNS,以便多個lambda容器可以均勻旋轉以完成工作?據我所知,lambda可以擴展事件,比如向S3添加文件,但我如何明確告訴lambda旋轉多個來處理所有需要發送的電子郵件?有更好的設計模式嗎?

我的另一個想法是將電子郵件添加到SQS隊列,因此電子郵件可以堅持櫃面錯誤的,但需要做一些變通方法,使那部戲很好地與拉姆達。

+2

我覺得你讓這個太難了。我剛剛檢查了[sendgrid.com](https://sendgrid.com/),每月的1.2M郵件甚至不是它們的最高層。這不便宜 - 大約650美元/月,但你不必建立已經存在的確切的東西。他們有工具讓你自定義和處理垃圾郵件/取消訂閱/開放計數等等。我對他們沒有經濟利益(還有其他提供者),但過去他們成功地使用了它們。 – stdunbar

+1

@奧斯汀我願意投入良好的資金,你可以與第三方合作。我使用過Mailgun,他們有一個用於發送電子郵件和支持webhook的API。我嚴重懷疑它不能用Sendgrid或Mailgun完成。 –

+0

我不懷疑它不能完成,但有一些其他業務需求需要它在內部構建。 – Austin

回答

5

在λ看起來似乎是一個很好的解決方案的表面,但事實並非如此。

你要麼需要開發自己的軟件或者端口/遷移現有的解決方案。管理電子郵件列表和發送電子郵件是一項適合正常EC2實例(適當調整大小)以及RDS的任務。發送單個電子郵件的過程很慢(對於每個電子郵件幾秒鐘的很多SMTP服務器),因此重疊是至關重要的。使用Lambda時,您將支付Lambda等待SMTP服務器接受每封電子郵件的所有秒數。

有在發送大量電子郵件(量大)很多問題。這就是爲什麼第三方服務變得如此受歡迎。他們提供的管理服務只需插入您的應用程序,即可轉到下一個任務。

如果你要使用AWS來發送電子郵件,可以閱讀這個最佳實踐文檔:

Amazon Simple Email Service Email Sending Best Practices

+0

我們目前正在以每秒20次的速度發送它們,而我們的舊實施已到位。 – Austin

0

一件事實現基於λ-解決方案時,要記住的是,每個拉姆達保證至少運行。偶爾會出現一個小故障,一些用戶會收到重複的電子郵件。 Here估計大約0.02%的所有調用導致多次執行。