【问题标题】:Is it reasonable to be concerned an SES object won't be available in S3?担心 SES 对象在 S3 中不可用是否合理?
【发布时间】:2019-09-07 02:23:10
【问题描述】:

我已通过以下方式设置 SES 规则:

动作:

1) S3:将 SES 对象保存到 S3 存储桶

2) Lambda:触发我的 lambda 函数进行电子邮件处理

在我的测试中,我总是能够使用第一行代码中的 messageID 从存储桶中检索我的 SES 对象。然后我可以毫无问题地解析和阅读它。

我的问题是,担心 SES 对象可能并不总是立即可用是否合理?我正在考虑添加错误处理以防对象不存在。基本上要等待 1/2 秒,然后再试一次,直到 lambda 超时。但是,如果这不是一个合理的问题,我不想使代码复杂化,由 boto3 等处理。想法?

【问题讨论】:

    标签: amazon-s3 aws-lambda boto3 amazon-ses


    【解决方案1】:

    在您的情况下,最好只使用 一个 S3 操作,配置有关于 SNS 主题的通知,并让您的 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.bucketNamereceipt.action.objectKey)。

    通过此设置,可以合理地考虑,当您的 Lambda 被触发时,对象可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 2010-12-10
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2012-06-06
      相关资源
      最近更新 更多