- AWS Services: Lambda, DynamoDB, API-Gateway (REST API, HTTP API)
- Serverless framework
- Terraform (для описания таблиц DynamoDB)
Простой пример реализации serverless API с использованием сервисов AWS. Может быть использован для
- обучения.
- знакомства с сервисами AWS.
- тестового стенда или основы нового проекта.
Так как это демонстрационный проект, многие вещи упрощены:
- Настройка ролей
- Не стоит описывать структуру БД в serverless, рассмотрите для этого другие инфраструктурные фрэймворки
- В реальном проекте, сразу разделяйте ваши ресурсы на несколько темплэйтов и стэки
- Для Read and Write capacity установлены минимальные значения (что это) в реальных проектах просчитывайте их или ставьте в on-demand(но тогда готовьте кошелек)
API включает следующие простые функции:
- создание пользователя.
- получения пользователя по id.
- создание комментария определенного пользователя.
Структура проекта:
applications- папка с основной логикой, разделенной по доменам.services- папка для сервисов или утилит.- файл
serverless- файл, содержащий описание инфраструктуры проекта.
В проекте продемонстрировано использование как API Gateway REST API (создание и получение пользователя) так и API Gateway HTTP API(создание комментария). Обе технологии используется в связке с Lambda functions. DynamoDB используется в качестве БД, соответственно.
- Создать аккаунт AWS. Обязательно сохраните креды в надежном месте, скачать их будет предложено один раз
- По best-practices рутовый акк не рекомендуется использовать, вместо этого необходимо создавать админский (как это сделать). Обязательно сохраните креды в надежном месте, скачать их будет предложено один раз
- Установка всех необходимых зависимостей локально и ручной деплой
- Деплой при помощи контэйнера (конфиг есть в проекте)
Достаточно сделать один раз, потом можно штамповать облачные проекты хоть каждый день)
- После того как настроили интерпритатор для проекта, устанавливаем зависимости.
- Не забываем про
npm iнужен для установки serverless framework. - После установки нужно настроить Serverless Framework
Переходим в корень проекта и запускаем команду: ./deploy.sh <your_stage> <aws_profile>
aws_profile указывался при конфигурации aws-cli, если что можно посмотреть в файле .aws/creds
your_stage наименование окружения(dev, stage, prod)
- Создаем .env файл
cp envTemplate .env - Прописываем соответствующие ключи (пробелов быть не должно):
- ENV - обозначение стэйджа
- REGION - можно посмотреть в правом верхнем углу консоли и переключиться при желании
- Билдим:
docker build -t deploy_image .(аккуратно, в контэйнере нода и не говорите, что не предупреждал) - Запускаем контейнер
docker run --env-file .env -d deploy_image:latest
При деплое serverless framework показал какие lambda функции у нас есть и эндпоинты на которые можно покидать запрос.
Для примера создадим нового пользователя:
curl --request POST \
--url <берем из консоли, например: https://<индетификатор API>.execute-api.us-east-1.amazonaws.com/dev/users> \
--header 'content-type: application/json' \
--data '{"username": "test", "email": "test@mail.ru"}'
В ответ придет id пользователя, удостоверимся, что он успешно сохранился в базе:
curl --request GET \
--url <берем из консоли после деплоя>