我以下列方式设置了SES规则:
操作:
1)S3:将SES对象保存到S3存储桶
2)Lambda:触发我的lambda函数进行电子邮件处理
在我的测试中,我总是能够使用第一行代码中的messageID从存储桶中检索我的SES对象。然后,我可以毫无问题地解析和阅读它。
我的问题是,关注SES对象可能并不总是立即可用是否合理?我正在考虑添加错误处理,因为对象不在那里。基本上等待1/2秒并再次尝试直到lambda超时。但是,如果这不是一个合理的问题,我不想让代码复杂化,由boto3等处理。思考?
在您的情况下,最好只使用一个配置了SNS主题通知的S3操作,并让Lambda订阅此主题。
您的Lambda将在消息中收到包含字符串化SES事件的SNS事件:
{
"Records": [
{
"EventSource": "aws:sns",
"EventVersion": "1.0",
...
"Sns": {
"Type": "Notification",
"MessageId": "...",
"TopicArn": "...",
"Subject": "Amazon SES Email Receipt Notification",
"Message": "<STRINGIFIED SES EVENT>",
...
}
}
]
}
如果你解析Message
,你会得到这样的东西:
{
"notificationType": "Received",
"mail": {
"timestamp": "...",
"source": "...",
"messageId": "...",
"destination": [
...
],
"headersTruncated": false,
"headers": [
...
],
"commonHeaders": {
"returnPath": "...",
"from": [
"..."
],
"date": "...",
"to": [
...
],
"messageId": "...",
"subject": "..."
}
},
"receipt": {
...
"action": {
"type": "S3",
"topicArn": "...",
"bucketName": "<YOUR_BUCKET>",
"objectKey": "<YOUR_OBJECT_KEY>"
}
}
}
在这里您可以找到桶中上传对象的确切参考(receipt.action.bucketName
和receipt.action.objectKey
)。
通过此设置,可以合理地考虑在触发Lambda时对象可用。