Skip to content

SavelevArtemD/simple-serverless-API

Repository files navigation

Пример простого serverless API

Что используется:

  • 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 рутовый акк не рекомендуется использовать, вместо этого необходимо создавать админский (как это сделать). Обязательно сохраните креды в надежном месте, скачать их будет предложено один раз

Варианты деплоя:

Ручная установка и деплой:

Достаточно сделать один раз, потом можно штамповать облачные проекты хоть каждый день)

- Установка зависимостей
  1. После того как настроили интерпритатор для проекта, устанавливаем зависимости.
  2. Не забываем про npm i нужен для установки serverless framework.
  3. После установки нужно настроить 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 <берем из консоли после деплоя>

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors