用戶通過Amazon Simple Email Serivce(SES)發(fā)送郵件時,希望能詳細(xì)查詢每封郵件的傳遞情況。而SES只提供基于Metric的統(tǒng)計數(shù)據(jù)。本文就通過SES提供SNS通知的功能,結(jié)合Lambda將通知存入AmazonElasticsearch,方便用戶查詢和統(tǒng)計。
架構(gòu)如下圖:

為方便部署和創(chuàng)建,建議您使用具有Admin權(quán)限的AWS用戶來完成部署。
如果您同時使用多個Region的SES服務(wù),您需要在各個Region部署Lambda程序,但您可以只使用一個AmazonElasticsearch實例。
3.為SES配置SNS
此場景為不使用ConfigurationSet(配置集)的情況,在SES的控制臺上,對于Domain或者Email來配置SNS,具體可以參考文檔: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/configure-sns-notifications.html
這里建議將選中包括郵件頭,這樣在后續(xù)Elasticsearch分析查詢時可以方便看到郵件標(biāo)題等信息。

4.創(chuàng)建Elasticsearch
為簡化網(wǎng)絡(luò)環(huán)境,我們將Amazon Elasticsearch配置通過公共IP來訪問。此Elasticsearch建議部署在與SES同一Region,以便快速插入數(shù)據(jù)和減少網(wǎng)絡(luò)流量費用;但如果需要,也可以部署在其他Region。
打開SES控制臺,創(chuàng)建Elasticsearch域:

請根據(jù)數(shù)據(jù)量來選擇實例類型和EBS存儲,建議可以先選擇小的機(jī)型,后續(xù)

選擇允許公有訪問權(quán)限,并啟用精細(xì)訪問控制,創(chuàng)建主用戶:

訪問策略先設(shè)置為公開訪問:

創(chuàng)建過程需要數(shù)分鐘,創(chuàng)建完成后請記錄下終端節(jié)點和Kibana地址:

5.部署Lambda
在SES所在Region,進(jìn)入到Lambda控制臺,填寫函數(shù)名aws-ses-to-elasticsearch,運行時為Nodejs12.x,讓Lambda自動創(chuàng)建角色:

創(chuàng)建完成后上傳zip包的代碼:(https://betashare.s3.cn-north-1.amazonaws.com.cn/nodejs/aws-ses-to-elasticsearch/lambda-bundle.zip)

編輯環(huán)境變量,填入:
BASE_URL: Elasticsearch的終端節(jié)點
USER和PASSWORD:創(chuàng)建Elasticsearch設(shè)置的用戶名和密碼
PREFIX:創(chuàng)建Elasticsearch索引的前綴。

調(diào)整超時時間為1分鐘。

配置觸發(fā)器為SES配置的SNS主題:

在SES控制臺發(fā)送一個測試郵件,也可以通過現(xiàn)有客戶端來發(fā)送測試。
請檢查CloudWatch的日志組中對應(yīng)Lambda函數(shù)的日志,確認(rèn)執(zhí)行成功:

7.創(chuàng)建Elasticsearch索引
打開Kibana控制臺,登錄之后進(jìn)入Management,創(chuàng)建一個indexpattern: ses*。

8.使用Elasticsearch
轉(zhuǎn)到Discover界面,可以搜索內(nèi)容:

創(chuàng)建Visual來方便統(tǒng)計:

創(chuàng)建一個SNS,并訂閱通知郵件。
創(chuàng)建一個Role用以ElasticSearch來觸發(fā)SNS,Role的信任關(guān)系如下:
{
? "Version": "2012-10-17",
? "Statement": [{
??? "Effect": "Allow",
??? "Principal": {
????? "Service": "es.amazonaws.com"
??? },
??? "Action": "sts:AssumeRole"
? }]
}
權(quán)限如下:
{
? "Version": "2012-10-17",
? "Statement": [{
??? "Effect": "Allow",
??? "Action": "sns:Publish",
??? "Resource": "sns-topic-arn"
? }]
}
進(jìn)入Alerts界面

創(chuàng)建monitor,根據(jù)frommail來計算:


創(chuàng)建觸發(fā)器

添加目標(biāo):

此處以每月發(fā)送50萬封郵件來計算,使用t3.small的Elasticsearch(AES)單節(jié)點和10G存儲:(不包含數(shù)據(jù)傳輸費,CloudWatch日志費用以及其他可能產(chǎn)生的費用。)
每月發(fā)送郵件數(shù)? ?Lambda費用? ? ??AES計算費用? ? ??AES存儲? ? ? ? ??總計
500000? ? ? ? ? ? ? ? ? $ 1.00? ? ? ? ? ? ? ? ?$? 41.66? ? ? ? ? ? ? $? 8.10? ? ? ? ? ? ? $?? 50.76