Как создать бессерверную серверную часть, чтобы принимать входящие данные формы (или другие данные из запросов API) и отправлять электронное письмо, содержащее эти данные.

S3+CloudFront — простое и недорогое решение для размещения статического веб-сайта. Однако что происходит, когда вам требуется HTML-форма? Для этой цели мы рассмотрим реализацию простого бессерверного бэкенда!

Введение

AWS S3 + Cloudfront обеспечивает недорогой и масштабируемый вариант размещения статического веб-сайта, такого как целевая страница для стартапа или страница подписки на информационный бюллетень. Однако как реализовать форму без сервера?

В этой статье мы рассмотрим безсерверный бэкэнд для формы с использованием AWS Lambda и API Gateway, чтобы инициировать отправку электронного письма с заполненной информацией из формы на заранее определенное электронное письмо с использованием AWS SES.

Предпосылки

Прежде чем мы углубимся в код Lambda, нам нужно настроить среду разработки и нашу учетную запись AWS, включая пункты ниже:

  1. Инструменты локальной разработки AWS Serverless Application Model (SAM) устанавливаются по инструкции здесь.
  2. AWS SES настроен в рабочем режиме (не в песочнице), а домен проверен по инструкции здесь.
  3. Создайте веб-сайт с HTML-формой, которую можно настроить для отправки данных в конечную точку шлюза API, который будет создан позже в этой статье.

Выполнение

Мы будем использовать SAM для развертывания Lambda и зависимых от нее ресурсов. Более подробное знакомство с SAM смотрите в статье ниже.



Начнем со структуры папок. У нас будет каталог для исходных файлов приложения, один для сценариев, которые можно использовать для развертывания приложения, и файлы верхнего уровня, такие как template.yaml, используемые SAM.

my-serverless-form/
├── cmd/
│   └── deploy.sh
├── src/
|   ├── package.json
│   └── index.js
├── .gitignore 
└── template.yaml

template.yaml будет выглядеть так, как показано ниже:

Приведенный выше шаблон определяет два ресурса:

  1. FormSubmissionFunction: Лямбда, которая при срабатывании отправит электронное письмо.
  2. FormSubmissionApi: Шлюз API, который будет получать общедоступные запросы из Интернета и запускать Lambda.

Лямбда-код будет указан в файле index.js, таком как показанный ниже:

В нем мы отправляем электронное письмо с помощью SES, содержащее данные из eventObject, которые будут содержать тело и заголовок запроса, который использовался для запуска Lambda. Вы можете отформатировать тело письма по своему усмотрению.

Для парсинга данных формы в Lambda я рекомендую использовать библиотеку ниже:



Чтобы развернуть Lambda, вы можете запустить файл script.sh (показан ниже) и следовать инструкциям на экране:

Заключение

Мы рассмотрели, как создать бессерверную серверную часть, которую можно использовать для приема входящих данных формы (или других данных из запросов API) и отправки электронного письма, содержащего данные.

Однако перед развертыванием чего-то подобного в рабочей среде может быть целесообразно внедрить reCaptcha (или аналогичную), чтобы боты не обнаружили вашу конечную точку и не отправили ложные данные (вы не хотите платить за время выполнения Lambda для отправки электронных писем из боты).

Надеюсь, вы нашли это полезным!

Если у вас есть какие-либо вопросы или вы просто хотите поговорить о стартапах, предпринимательстве, заключении контрактов или разработке, просто отправьте мне электронное письмо по адресу paulo@avantsoft.com.br.