В вашем случае лучше всего использовать только одно действие S3, настроенное с уведомлением по теме SNS, и ваша Lambda может подписаться на эту тему.
Ваш Lambda получит событие SNS, содержащее строковое событие SES в сообщении:
{
"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
).
При такой настройке разумно учитывать, что когда ваша лямбда запускается, объект доступен.