Открыть сервис

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 →