Реализация API в бессерверной архитектуре AWS
В этой статье разработчики компании DST Global описывают реализации rest API с бессерверной инфраструктурой AWS и рассматриваются преимущества бессерверного подхода по сравнению с традиционным подходом.
В этой статье описывается реализация RESTful API AWS на бессерверной архитектуре . В нем представлен подробный обзор архитектуры, потока данных и сервисов AWS, которые можно использовать. В этой статье также описываются преимущества бессерверной архитектуры по сравнению с традиционным подходом.
Что такое бессерверная архитектура?
Бессерверная архитектура, также известная как бессерверные вычисления или функция как услуга, представляет собой подход к проектированию программного обеспечения, который позволяет разработчикам создавать и запускать приложения без управления базовой инфраструктурой. Поставщик облачных услуг отвечает за управление и масштабирование облачной инфраструктуры, включая предоставление серверов для запуска приложений, баз данных и хранилища.
Важность бессерверной архитектуры
Предприятия платят только за используемые ими вычислительные ресурсы (например, количество запросов, время выполнения и потребляемые ресурсы), поэтому первоначальные затраты на оборудование или программное обеспечение отсутствуют. Это устраняет необходимость платить за простаивающую инфраструктуру, что приводит к значительной экономии средств.
Бессерверные архитектуры автоматически масштабируются вверх и вниз в зависимости от рабочей нагрузки. Это гарантирует, что приложения смогут обрабатывать различные уровни трафика.
Каждая функция может масштабироваться независимо, гарантируя эффективное распределение ресурсов в зависимости от спроса.
Бессерверная архитектура хорошо подходит для приложений, управляемых событиями , где функции запускаются определенными событиями, такими как HTTP-запросы, изменения базы данных или обновления очереди сообщений.
Сервисы AWS, которые будут использоваться для реализации
Следующие сервисы AWS могут быть включены в реализацию REST API. В приведенном ниже списке упоминается сервис AWS и его назначение в реализации API.
Маршрут53
Route53 можно использовать для регистрации домена, маршрутизации DNS, потока трафика, управления трафиком, проверки работоспособности и мониторинга.
API-шлюз
Используйте API Gateway для создания, публикации, обслуживания, мониторинга и защиты REST API в любом масштабе.
HTTP-методы ( GET,POST, PUT, DELETE, PATCH, OPTION) можно создать в шлюзе API. Эти методы могут быть интегрированы в соответствующую функцию Lambda фронт-контроллера.
WAF
AWS WAF (брандмауэр веб-приложений) помогает защититься от распространенных веб-эксплойтов и ботов, которые могут повлиять на доступность, поставить под угрозу безопасность или потреблять чрезмерное количество ресурсов. Мы можем связать WAF со шлюзом API для фильтрации вредоносных запросов.
С помощью WAF мы можем настроить следующее:
- Веб-списки ACL — правила и группы правил для определения разрешенного трафика.
- Пользовательское правило : условия соответствия набора IP-адресов, условия соответствия строк и регулярных выражений, условия географического соответствия, правила на основе ставок.
- Управление ботами
Lambda
Lambda-функция для авторизации
Авторизатор Lambda принимает идентификатор вызывающего абонента в качестве входных данных и возвращает политику IAM в качестве выходных данных. Используйте авторизатор Lambda для реализации пользовательской аутентификации и авторизации.
Lambda после аутентификации и авторизации Lambda возвращает API-шлюзу два типа политик:
- Позволять
- Отрицать
Lambda-функции для бизнес-логики
Lambda-функции для реализации бизнес-логики, вызова других Lambda-функций, последующих сервисов и баз данных.
Другие сервисы AWS
- CloudWatch . Используйте AWS CloudWatch для мониторинга вашего приложения и хранения журналов, информационных панелей и оповещений, которые также можно создавать для отчетов и упреждающего мониторинга.
- SQS и SNS . Используйте AWS SQS для хранения асинхронных сообщений и SNS для отправки уведомлений в Lambda-функции.
- Dynamo DB или RDS — база данных приложений
- IAM – сервис управления идентификацией и доступом для определения ролей и доступа к вашим ресурсам AWS.
- VPC, подсеть, группы безопасности . VPC изолирует ресурсы AWS в защищенной сети, подсети сегментируют VPC для организации, а группы безопасности контролируют трафик с помощью правил брандмауэра.
Архитектура и поток данных
На диаграмме архитектуры ниже описан набор используемых сервисов AWS, поток данных и интеграция с другими сервисами.
На высоком уровне клиент отправляет HTTP-запрос в Amazon API Gateway, который запускает функцию AWS Lambda. Функция Lambda обрабатывает запрос, при необходимости взаимодействует с другими сервисами AWS (например, DynamoDB для хранения данных) и возвращает ответ обратно в API Gateway, который затем отправляет ответ клиенту.
Шаги потока данных
1. Пользователь отправляет HTTP-запрос к API с действительными заголовками авторизации (т. е. токеном JWT , ключами API и т. д.).
2. Маршрут 53 перенаправляет запрос на API-шлюз, который будет перехвачен брандмауэром веб-приложения.
3. В брандмауэрах веб-приложений настроены разные правила для защиты приложений от веб-атак. Если брандмауэр обнаруживает такой вредоносный запрос, он немедленно блокирует его или перенаправляет его на шлюз API.
4. Lambda Authorizer, настроенный с помощью шлюза API, перехватывает запрос, аутентифицирует и авторизует запрос пользователя. Если пользователю разрешен доступ к базовому ресурсу, запрос будет перенаправлен на Lambda-интерфейс фронт-контроллера.
5. Lambda-контроллер фронтального контроллера делегирует запрос соответствующим Lambda-функциям службы.
6. Согласно бизнес-логике, Lambda-служба обрабатывает запрос и возвращает соответствующий ответ клиенту.
7. При обработке запроса Lambda-функции службы могут вызывать нижестоящие API-интерфейсы REST или базы данных. Lambda-функции службы также прослушивают очереди SNS или подписываются на SNS.
8. Служба управления идентификацией и доступом (IAM) используется для определения ролей для ресурсов и предоставления доступа к этим ролям.
9. Все ресурсы будут отправлять журналы приложений в CloudWatch для мониторинга и устранения неполадок.
Типичные случаи использования
- Бессерверную архитектуру можно использовать для приложений, управляемых событиями, где данные необходимо обрабатывать в режиме реального времени, например поток данных или обработка уведомлений.
- Микросервисы можно внедрять и развертывать независимо и изолированно в бессерверной архитектуре для лучшей масштабируемости.
- Приложение для обработки запланированных задач может быть реализовано и развернуто в бессерверной архитектуре, которая может запускаться в определенное время.
- Во всех случаях использования, где стоимость является критическим компонентом, можно использовать бессерверную архитектуру.
Предоставление и развертывание инфраструктуры
На предприятии помимо производственной среды доступно несколько сред для целей разработки и тестирования. Создание одного и того же набора ресурсов в разных средах и отслеживание изменений конфигурации вручную может оказаться сложной задачей и может привести к ошибкам.
Для решения этой проблемы можно использовать Terraform (инфраструктура как код). Terraform помогает реплицировать ресурсы из одной среды в другую. Помимо этого, он также отслеживает состояние инфраструктуры.
Развертывание можно автоматизировать с помощью любого инструмента CI/CD (например, Jenkins или GitLab ) с помощью Terraform.
Заключение
В заключение разработчики DST Global хотели подчеркнуть, использование бессерверной архитектуры AWS для разработки REST API предлагает множество преимуществ с точки зрения масштабируемости, экономической эффективности и простоты управления.
Приняв бессерверный подход, разработчики могут больше сосредоточиться на создании надежных API без затрат на управление серверами. Модель AWS Lambda, управляемая событиями, обеспечивает плавное масштабирование, гарантируя, что ваши API смогут эффективно обрабатывать различные рабочие нагрузки.