Amazon API Gateway
Amazon API Gateway — это полностью управляемый сервис облачной платформы Amazon Web Services (AWS), предназначенный для создания, публикации, мониторинга и защиты API (программных интерфейсов приложений) любого масштаба. Сервис выступает в роли «входных ворот» для серверных приложений, сервисов и данных, позволяя разработчикам определять RESTful и WebSocket API, а также обрабатывать HTTP-запросы, управлять трафиком, авторизацией и контролем доступа, не управляя инфраструктурой веб-серверов.
История и развитие
Сервис был анонсирован компанией Amazon в июле 2015 года на конференции AWS re:Invent и запущен в коммерческую эксплуатацию в декабре того же года. Появление Amazon API Gateway стало ответом на растущую потребность в бессерверной (serverless) архитектуре, где разработчики могли бы сосредоточиться на логике приложения, а не на настройке прокси-серверов или балансировщиков нагрузки.
Первоначально сервис поддерживал только REST API. В декабре 2018 года была добавлена поддержка WebSocket API, что позволило реализовывать двустороннюю связь в реальном времени (например, для чатов, стриминга данных или игр). С тех пор функциональность постоянно расширялась: появилась интеграция с AWS WAF (Web Application Firewall), поддержка приватных API (Private API Gateway), улучшенные механизмы кэширования и версионирования.
Ключевые возможности и архитектура
Amazon API Gateway работает как управляемый прокси-сервер, который принимает входящие HTTP/HTTPS запросы, выполняет заданные преобразования и перенаправляет их к целевому бэкенду. Архитектурно сервис состоит из нескольких ключевых компонентов:
Типы создаваемых API
Сервис позволяет создавать три основных типа API:
- REST API — классический RESTful интерфейс, работающий по протоколу HTTP. Поддерживает все основные методы (GET, POST, PUT, DELETE, PATCH) и форматы данных (JSON, XML).
- HTTP API — упрощённая и более дешёвая альтернатива REST API, оптимизированная для низкой задержки и высокой производительности. Предназначена для простых сценариев, где не требуется сложная валидация запросов или трансформация данных.
- WebSocket API — реализует постоянное двустороннее соединение между клиентом и сервером, позволяя серверу отправлять данные без предварительного запроса от клиента.
Интеграция с бэкендами
API Gateway может маршрутизировать запросы к различным типам бэкендов:
- AWS Lambda — наиболее распространённый сценарий, где функция Lambda обрабатывает запрос и возвращает ответ. Это основа бессерверной архитектуры.
- HTTP-эндпоинты — любые внешние или внутренние веб-сервисы, включая серверы на EC2, контейнеры ECS или сторонние API.
- AWS Service Proxy — прямой вызов других сервисов AWS, таких как DynamoDB, SQS, SNS или Step Functions, без необходимости писать промежуточный код.
- Mock-интеграция — возвращает фиксированный ответ без обращения к бэкенду, используется для тестирования или прототипирования.
Основные компоненты и настройка
Ресурсы и методы
API определяется набором ресурсов (URL-путей) и HTTP-методов для каждого ресурса. Например, для ресурса /users можно определить методы GET (получить список пользователей) и POST (создать нового пользователя). Для каждого метода настраивается:
- Тип интеграции (Lambda, HTTP, Mock и т.д.).
- Параметры запроса (заголовки, строки запроса, путь).
- Модели данных для валидации тела запроса и ответа.
Этапы развёртывания
API Gateway поддерживает концепцию этапов (stages), которые представляют собой отдельные среды развёртывания (например, dev, test, prod). Для каждого этапа можно настроить:
- Уникальный URL для вызова API.
- Переменные этапа (например, разные URL бэкенда для разных сред).
- Параметры кэширования и ограничения скорости.
- Включение логирования в Amazon CloudWatch.
Аутентификация и авторизация
Сервис предоставляет несколько механизмов защиты API:
- AWS IAM — аутентификация через подпись запроса с использованием ключей доступа AWS.
- Cognito User Pools — интеграция с сервисом Amazon Cognito для аутентификации пользователей через логин/пароль, социальные сети или OAuth 2.0.
- Lambda Authorizer (ранее — Custom Authorizer) — пользовательская функция Lambda, которая проверяет токен (например, JWT) и возвращает политику доступа (IAM policy), разрешающую или запрещающую вызов.
- API Keys — простые ключи доступа, передаваемые в заголовке запроса.
Трансформация запросов и ответов
С помощью шаблонов Apache Velocity Template Language (VTL) можно изменять структуру входящего запроса перед отправкой к бэкенду и исходящего ответа перед возвратом клиенту. Это позволяет, например, скрыть внутреннюю структуру данных, добавить заголовки или преобразовать формат (XML в JSON).
Производительность и масштабирование
Amazon API Gateway автоматически масштабируется для обработки миллионов параллельных запросов. Сервис поддерживает:
- Кэширование ответов — включение кэша на уровне этапа или метода для снижения нагрузки на бэкенд и уменьшения задержки. Кэш хранится в памяти, его размер настраивается от 0,5 ГБ до 237 ГБ.
- Троттлинг (ограничение скорости) — настройка лимитов на количество запросов в секунду (RPS) для предотвращения перегрузки бэкенда или злоупотреблений. Можно задать лимиты на уровне этапа, метода или отдельного ключа API.
- Берст-лимиты — кратковременные всплески трафика, превышающие средний лимит, обрабатываются с помощью механизма «корзины токенов» (token bucket).
Ценообразование
Стоимость использования Amazon API Gateway зависит от количества вызовов API и объёма переданных данных. Модель ценообразования включает:
- Плата за вызовы — за каждый миллион запросов взимается фиксированная плата (например, для REST API — около 3,5 долларов за миллион запросов в регионе US East).
- Плата за исходящий трафик — за гигабайт данных, переданных из API Gateway клиенту.
- Плата за кэширование — почасовая аренда кэш-памяти определённого размера.
- Плата за WebSocket — за миллион минут соединения и за количество сообщений.
Для HTTP API стоимость значительно ниже (около 1 доллара за миллион запросов), что делает их привлекательными для простых сценариев.
Применение и типовые сценарии
Amazon API Gateway широко используется в следующих архитектурных паттернах:
- Бессерверные веб-приложения — создание полноценных REST API для одностраничных приложений (SPA) или мобильных приложений, где каждый запрос обрабатывается функцией Lambda.
- Микросервисные архитектуры — единый шлюз для маршрутизации запросов к различным микросервисам, обеспечивающий централизованное управление безопасностью, мониторингом и версионированием.
- API-прокси — трансляция запросов к внешним или устаревшим API с добавлением кэширования, аутентификации и логирования.
- WebSocket-приложения — реализация чатов, уведомлений в реальном времени, стриминга данных с сервера на клиент (например, обновление котировок акций).
- Разделение публичного и приватного API — создание публичных эндпоинтов для внешних клиентов и приватных эндпоинтов (доступных только внутри VPC) для внутренних сервисов.
Ограничения и критика
Несмотря на широкие возможности, сервис имеет ряд ограничений:
- Лимиты на размер запроса — максимальный размер тела запроса для REST API составляет 10 МБ, для HTTP API — 4 МБ. Для передачи больших файлов требуется использовать другие сервисы, например, AWS S3 с предварительно подписанными URL.
- Лимит на время выполнения интеграции — максимальное время ожидания ответа от бэкенда (тайм-аут) составляет 29 секунд для REST API и 30 секунд для HTTP API. Долгие операции требуют асинхронной обработки.
- Сложность отладки — при неправильной настройке шаблонов VTL или политик доступа ошибки могут быть неочевидными, а логирование в CloudWatch — единственным инструментом диагностики.
- Зависимость от региона — API Gateway является региональным сервисом, и для глобального охвата требуется настройка Amazon CloudFront или Route 53 с гео-маршрутизацией.
Интересные факты
- Amazon API Gateway является ключевым компонентом платформы AWS Amplify, предназначенной для быстрой разработки мобильных и веб-приложений.
- Сервис поддерживает OpenAPI 3.0 спецификацию для импорта и экспорта определений API.
- Для приватных API (Private API Gateway) используется технология AWS PrivateLink, позволяющая вызывать API изнутри виртуального частного облака (VPC) без прохождения через публичный интернет.
Источники
- Официальная документация AWS: «Amazon API Gateway Developer Guide»
- Документация AWS: «What is Amazon API Gateway?»
- AWS re:Invent 2015 — анонс сервиса
- AWS News Blog: «Amazon API Gateway – Build and Deploy REST and WebSocket APIs at Scale» (2018)
- Документация AWS: «Amazon API Gateway Pricing»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →