Разрабатываете микросервис на Lambda и ловите ошибку 502 — таймауты интеграции. Или клиент жалуется на скорость ответа, а в логах CloudWatch — задержки до 10 секунд. Скорее всего, проблема в настройке API Gateway: неправильный таймаут, отсутствие кэширования или неверный тип авторизатора. За 5 лет работы с AWS мы настроили более 50 API Gateway — от простых REST-прокси до multi-region шлюзов с Cognito и кастомными authorizer'ами. Недавно на одном проекте неправильная конфигурация таймаута приводила к падению эндпоинта при пиковых нагрузках. После замены HTTP на REST API и включения кэширования latency снизилась на 40%, а затраты на инфраструктуру сократились на 30%. Закажите бесплатную консультацию — мы поможем сэкономить до 30% ваших ежемесячных расходов на API Gateway.
Мы решаем такие проблемы: некорректная интеграция с Lambda (N+1 запросы в DynamoDB из-за плохой проектировки), отсутствие троттлинга, приводящее к перегрузке бэкенда, и неправильный выбор типа API — REST вместо HTTP, из-за чего платите в 3,5 раза больше. Правильная конфигурация API Gateway позволяет снизить latency на 40% и избежать простоев. Оптимальная настройка кэширования сокращает задержку вдвое.
Как выбрать между REST API и HTTP API?
| Возможность | REST API | HTTP API |
|---|---|---|
| Lambda integration | + | + |
| JWT authorizer | + | + |
| Custom authorizer | + | + |
| Usage plans / API keys | + | — |
| Request/Response mapping | + | — |
| WAF интеграция | + | — |
| Private endpoints | + | — |
| Цена (млн запросов) | $3,50 | $1,00 |
HTTP API подходит для простых backend→Lambda прокси. REST API нужен для сложной трансформации запросов и throttling по API-ключам. Если вы только начинаете — выбирайте HTTP, он в 3,5 раза дешевле. За счёт правильного выбора можно сэкономить до 20% бюджета на инфраструктуру.
Как снизить затраты на API Gateway?
Выбор типа API — лишь первый шаг. Включение кэширования на уровне шлюза сокращает количество вызовов Lambda, что напрямую влияет на стоимость. При высокой нагрузке замена HTTP на REST с кэшированием может снизить затраты на 30-50%. Также используйте Terraform для автоматизации: устранение ручных ошибок уменьшает число дорогостоящих инцидентов. Мы оценим ваш сценарий и предложим оптимальную конфигурацию — свяжитесь для деталей.
Почему стоит использовать Terraform для API Gateway?
Terraform позволяет версионировать инфраструктуру как код, избежать ошибок ручной настройки и воспроизводить окружения за минуты. Ниже — типичная конфигурация REST API с Cognito-авторизацией, которой мы пользуемся в каждом проекте.
# main.tf
resource "aws_api_gateway_rest_api" "main" {
name = "myapp-api"
description = "Main application API"
endpoint_configuration {
types = ["REGIONAL"]
}
}
resource "aws_api_gateway_resource" "users" {
rest_api_id = aws_api_gateway_rest_api.main.id
parent_id = aws_api_gateway_rest_api.main.root_resource_id
path_part = "users"
}
resource "aws_api_gateway_method" "users_get" {
rest_api_id = aws_api_gateway_rest_api.main.id
resource_id = aws_api_gateway_resource.users.id
http_method = "GET"
authorization = "COGNITO_USER_POOLS"
authorizer_id = aws_api_gateway_authorizer.cognito.id
request_parameters = {
"method.request.querystring.page" = false
"method.request.querystring.limit" = false
}
}
resource "aws_api_gateway_integration" "users_get" {
rest_api_id = aws_api_gateway_rest_api.main.id
resource_id = aws_api_gateway_resource.users.id
http_method = aws_api_gateway_method.users_get.http_method
integration_http_method = "POST"
type = "AWS_PROXY"
uri = aws_lambda_function.users_handler.invoke_arn
}
Как выбрать тип авторизации?
Cognito подходит для JWT-аутентификации с соцсетями или LDAP. Lambda authorizer — если нужна интеграция с внешним IdP или сложная логика (например, проверка прав доступа на основе IP). Выбирайте Cognito для стандартных сценариев, Lambda — для гибкости.
Cognito Authorizer
resource "aws_api_gateway_authorizer" "cognito" {
name = "cognito-authorizer"
rest_api_id = aws_api_gateway_rest_api.main.id
type = "COGNITO_USER_POOLS"
provider_arns = [aws_cognito_user_pool.main.arn]
identity_source = "method.request.header.Authorization"
}
Lambda Authorizer (кастомная аутентификация)
resource "aws_api_gateway_authorizer" "lambda" {
name = "lambda-authorizer"
rest_api_id = aws_api_gateway_rest_api.main.id
authorizer_uri = aws_lambda_function.authorizer.invoke_arn
authorizer_result_ttl_in_seconds = 300
type = "TOKEN"
identity_source = "method.request.header.Authorization"
}
Usage Plans и API Keys
resource "aws_api_gateway_usage_plan" "standard" {
name = "standard-plan"
api_stages {
api_id = aws_api_gateway_rest_api.main.id
stage = aws_api_gateway_stage.prod.stage_name
}
throttle_settings {
burst_limit = 100
rate_limit = 50
}
quota_settings {
limit = 10000
period = "DAY"
}
}
resource "aws_api_gateway_api_key" "partner_app" {
name = "partner-app-key"
}
resource "aws_api_gateway_usage_plan_key" "partner" {
key_id = aws_api_gateway_api_key.partner_app.id
key_type = "API_KEY"
usage_plan_id = aws_api_gateway_usage_plan.standard.id
}
Стейдж, логирование и деплой
resource "aws_api_gateway_deployment" "main" {
rest_api_id = aws_api_gateway_rest_api.main.id
triggers = {
redeployment = sha1(jsonencode([
aws_api_gateway_resource.users.id,
aws_api_gateway_method.users_get.id,
aws_api_gateway_integration.users_get.id,
]))
}
lifecycle {
create_before_destroy = true
}
}
resource "aws_api_gateway_stage" "prod" {
deployment_id = aws_api_gateway_deployment.main.id
rest_api_id = aws_api_gateway_rest_api.main.id
stage_name = "prod"
access_log_settings {
destination_arn = aws_cloudwatch_log_group.api_gateway.arn
format = jsonencode({
requestId = "$context.requestId"
sourceIp = "$context.identity.sourceIp"
requestTime = "$context.requestTime"
httpMethod = "$context.httpMethod"
routeKey = "$context.routeKey"
status = "$context.status"
responseLength = "$context.responseLength"
latency = "$context.responseLatency"
})
}
}
resource "aws_api_gateway_method_settings" "prod" {
rest_api_id = aws_api_gateway_rest_api.main.id
stage_name = aws_api_gateway_stage.prod.stage_name
method_path = "*/*"
settings {
throttling_burst_limit = 500
throttling_rate_limit = 200
logging_level = "INFO"
metrics_enabled = true
}
}
Как настроить мониторинг и алерты?
- Включите
metrics_enabled = trueв settings стейджа. - Определите ключевые метрики: 4XXError, 5XXError, Latency, Count.
- Создайте CloudWatch Alarms на основе порогов (см. таблицу ниже).
- Настройте SNS-уведомления для алертов.
| Метрика | Описание | Порог для алерта |
|---|---|---|
| 4XXError | Количество клиентских ошибок | > 5% запросов |
| 5XXError | Количество серверных ошибок | > 1% запросов |
| Latency | Средняя задержка ответа | > 1000 мс |
| Count | Количество запросов | > 1000/мин |
Такой подход позволяет своевременно реагировать на проблемы и поддерживать SLA.
Что входит в работу
| Этап | Длительность | Результат |
|---|---|---|
| Аудит текущей архитектуры | 1 день | План оптимизации |
| Проектирование API | 1–2 дня | Схема API, выбор авторизации |
| Terraform-скрипты | 2–3 дня | Воспроизводимая инфраструктура |
| Интеграция с Lambda/DB | 1–2 дня | Работающие эндпоинты |
| Настройка мониторинга | 0.5 дня | CloudWatch дашборд и алерты |
| Деплой и документация | 1 день | Staging + документация |
Сроки выполнения
Настройка REST API с одним authorizer и usage plan — 3–5 рабочих дней. Если требуется кастомный домен или сложная трансформация — до 7 дней. Точные сроки оцениваем после бесплатного аудита вашего проекта.
Настройка API Gateway под ключ позволяет сэкономить до 30% стоимости разработки за счёт использования инфраструктуры как кода. Наша команда сертифицированных AWS-инженеров имеет 5+ лет опыта и 50+ успешных проектов с API Gateway. Обращайтесь к нам за бесплатной консультацией — мы подготовим индивидуальное предложение и рассчитаем реальную экономию. Получите оценку вашего проекта уже сегодня.







