Разумно ли быть обеспокоенным, что объект SES не будет доступен в S3? - PullRequest
0 голосов
/ 17 апреля 2019

Я настроил правило SES следующим образом:

Действия:

1) S3: сохраняет объект SES в корзину S3

2) Лямбда: триггерымоя лямбда-функция для обработки электронной почты

В моем тестировании мне всегда удавалось извлечь мой объект SES из корзины, используя messageID в самой первой строке кода.Затем я могу анализировать и читать его без проблем.

Мой вопрос: разумно ли беспокоиться о том, что объект SES не всегда может быть сразу доступен?Я рассматриваю добавление обработки ошибок, если объект не существует.Обычно нужно подождать 1/2 секунды и повторить попытку, пока не истечет время лямбды.Но я не хочу усложнять код, если это не разумная проблема, обработанная boto3 и т. Д.Мысли?

1 Ответ

0 голосов
/ 17 апреля 2019

В вашем случае лучше всего использовать только одно действие 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).

При такой настройке разумно учитывать, что когда ваша лямбда запускается, объект доступен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...