关注SES对象在S3中不可用是否合理?

问题描述 投票:0回答:1

我以下列方式设置了SES规则:

操作:

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

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

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

我的问题是,关注SES对象可能并不总是立即可用是否合理?我正在考虑添加错误处理,因为对象不在那里。基本上等待1/2秒并再次尝试直到lambda超时。但是,如果这不是一个合理的问题,我不想让代码复杂化,由boto3等处理。思考?

amazon-s3 aws-lambda boto3 amazon-ses
1个回答
0
投票

在您的情况下,最好只使用一个配置了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.bucketNamereceipt.action.objectKey)。

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

© www.soinside.com 2019 - 2024. All rights reserved.