Как создать бессерверную серверную часть, чтобы принимать входящие данные формы (или другие данные из запросов API) и отправлять электронное письмо, содержащее эти данные.
S3+CloudFront — простое и недорогое решение для размещения статического веб-сайта. Однако что происходит, когда вам требуется HTML-форма? Для этой цели мы рассмотрим реализацию простого бессерверного бэкенда!
Введение
AWS S3 + Cloudfront обеспечивает недорогой и масштабируемый вариант размещения статического веб-сайта, такого как целевая страница для стартапа или страница подписки на информационный бюллетень. Однако как реализовать форму без сервера?
В этой статье мы рассмотрим безсерверный бэкэнд для формы с использованием AWS Lambda и API Gateway, чтобы инициировать отправку электронного письма с заполненной информацией из формы на заранее определенное электронное письмо с использованием AWS SES.
Предпосылки
Прежде чем мы углубимся в код Lambda, нам нужно настроить среду разработки и нашу учетную запись AWS, включая пункты ниже:
- Инструменты локальной разработки AWS Serverless Application Model (SAM) устанавливаются по инструкции здесь.
- AWS SES настроен в рабочем режиме (не в песочнице), а домен проверен по инструкции здесь.
- Создайте веб-сайт с HTML-формой, которую можно настроить для отправки данных в конечную точку шлюза API, который будет создан позже в этой статье.
Выполнение
Мы будем использовать SAM для развертывания Lambda и зависимых от нее ресурсов. Более подробное знакомство с SAM смотрите в статье ниже.
Начнем со структуры папок. У нас будет каталог для исходных файлов приложения, один для сценариев, которые можно использовать для развертывания приложения, и файлы верхнего уровня, такие как template.yaml
, используемые SAM.
my-serverless-form/ ├── cmd/ │ └── deploy.sh ├── src/ | ├── package.json │ └── index.js ├── .gitignore └── template.yaml
template.yaml
будет выглядеть так, как показано ниже:
Приведенный выше шаблон определяет два ресурса:
FormSubmissionFunction
: Лямбда, которая при срабатывании отправит электронное письмо.FormSubmissionApi
: Шлюз API, который будет получать общедоступные запросы из Интернета и запускать Lambda.
Лямбда-код будет указан в файле index.js
, таком как показанный ниже:
В нем мы отправляем электронное письмо с помощью SES, содержащее данные из eventObject
, которые будут содержать тело и заголовок запроса, который использовался для запуска Lambda. Вы можете отформатировать тело письма по своему усмотрению.
Для парсинга данных формы в Lambda я рекомендую использовать библиотеку ниже:
Чтобы развернуть Lambda, вы можете запустить файл script.sh
(показан ниже) и следовать инструкциям на экране:
Заключение
Мы рассмотрели, как создать бессерверную серверную часть, которую можно использовать для приема входящих данных формы (или других данных из запросов API) и отправки электронного письма, содержащего данные.
Однако перед развертыванием чего-то подобного в рабочей среде может быть целесообразно внедрить reCaptcha (или аналогичную), чтобы боты не обнаружили вашу конечную точку и не отправили ложные данные (вы не хотите платить за время выполнения Lambda для отправки электронных писем из боты).
Надеюсь, вы нашли это полезным!
Если у вас есть какие-либо вопросы или вы просто хотите поговорить о стартапах, предпринимательстве, заключении контрактов или разработке, просто отправьте мне электронное письмо по адресу paulo@avantsoft.com.br.