Как отправлять вложения электронной почты с помощью AWS Lambda и AWS Simple Email Service (SES)

Прогрессивные веб-приложения, бессерверная архитектура, микросервисы в облаке… если вы обращали внимание на последние тенденции веб-разработки, вы, несомненно, слышали эти ключевые фразы. Воспользуемся одним из них сегодня. Лямбда-функции - это исполняемые функции, размещенные на AWS, которые запускаются только при вызове или вызове Lambda.

Но прежде чем продолжить во времена Короны -

Да! читайте прямо, оставайтесь дома и читайте мой блог, потому что это безопасно :) Теперь давайте двигаться вперед.

Одним из основных преимуществ лямбда-выражений является то, что с вас взимается плата только за время, необходимое для выполнения функции, как и для приложений-функций Azure, работающих в планах потребления.

Отправить письмо от AWS lambda с вложением довольно просто. Просто создайте модуль tempfile для создания временного каталога с помощью mkdtemp (). И тогда вы готовы сбросить туда свои данные JSON!

Или вы можете использовать каталог «tmp». Это твой выбор. Вот еще один способ.

tempdir = tempfile.mkdtemp()
path = os.path.join(tempdir)
with open(path + '/temp.json', 'w') as fp:
    json.dump(response_content, fp)

Следующим шагом будет написание кода для отправки писем. Но перед этим зарегистрируйте AWS Simple Simple Email Service. Просто перейдите в раздел «Адреса электронной почты» на консоли SES.

У меня есть два фрагмента кода из исходной лямбда-функции. Ознакомьтесь с ними ниже:

Для обычного письма -

И просто вызовите метод по шаблону

send_email('[email protected]', '[email protected]', 'us-east-1', 'AWS LAMBDA TEST')
  • Для писем с вложениями требуется сообщение MIMEMultipart -
    # Display an error if something goes wrong. 
    except ClientError as e:
        return(e.response['Error']['Message'])
    else:
        return("Email sent! Message ID:", response['MessageId'])

JSON в CSV -

И просто вызовите метод по шаблону

json_to_csv(path, '/xxx.json', '/xxx.csv')
send_email('[email protected]', '[email protected]', 'us-east-1', 'AWS LAMBDA TEST', path + '/xxx.json')

Если вы хотите отправить его нескольким получателям, вы можете изменить сценарий следующим образом:

  1. прокомментируйте эту строку
# msg['To'] = recipient

2. Измените эту часть кода так, чтобы "Пункты назначения" принимал список.

response = client.send_raw_email(
            Source=msg['From'],
            Destinations=recipient,
            RawMessage={
                'Data':msg.as_string(),
            }
        )

Вызов этого просто будет иметь список в параметре получателей.

send_email('[email protected]', ['[email protected]','[email protected]'], 'us-east-1', 'AWS LAMBDA TEST', path + '/xxx.json')

Роль IAM для работы вышеуказанного

{
  "Effect":"Allow",
  "Action":[
    "ses:SendEmail",
    "ses:SendRawEmail"
  ],
  "Resource":"*"
}

Чтобы добавить триггер в AWS Lambda, щелкните событие Cloudwatch и добавьте расписание, используя шаблон cron. Для выражения Cron (0 0 1 *? *), Т.е. для 1-го дня всех месяцев для всех лет. Для получения дополнительной информации - https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

Мой окончательный дизайн выглядит так -

Я надеюсь, что теперь вы сможете быстро настроить архитектуру Cloudwatch + Lambda + SES, которая требует вложений электронной почты. Дайте мне знать в комментариях ниже, если вы застряли. Что ж, если вам понравилось, не забудьте подарить мне один из этих - 👏 и подписывайтесь на меня, чтобы получать обновления!

Больше контента на plainenglish.io