Настройка балансировки нагрузки (AWS ALB/ELB) для сайта

Когда сайт не выдерживает пиковой нагрузки и отвечает 502-ми ошибками, бизнес теряет клиентов в самый ответственный момент. Мы настраиваем балансировку нагрузки на AWS ALB и ELB под ключ: проводим аудит, проектируем архитектуру, внедряем и сопровождаем решение. Наша команда обеспечивает стабильную работу вашего сайта даже при резких всплесках трафика, а результат — надёжная инфраструктура, которая масштабируется вместе с вашим бизнесом.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Настройка балансировки нагрузки (AWS ALB/ELB) для сайта
Сложный
~2-3 дня
Часто задаваемые вопросы

Настройка балансировки нагрузки через AWS ALB и ELB

Сайт падает под нагрузкой? 502 ошибки при пиковых запросах в день акции? Мы сталкивались с этим в проектах с трафиком 100k+ RPS. Балансировка нагрузки через AWS ALB — стандартное решение для высоконагруженных проектов. Настраиваем ALB/ELB под ключ: target groups, listener rules, SSL, интеграция с Auto Scaling. Опыт 7+ лет, 50+ настроенных балансировщиков. Правильная конфигурация ALB критична для доступности и скорости сайта — существенная экономия на инфраструктуре при грамотной настройке.

AWS предоставляет управляемые балансировщики нагрузки без необходимости поддерживать собственный сервер. Application Load Balancer (ALB) работает на уровне HTTP/HTTPS с маршрутизацией по пути и заголовкам. Network Load Balancer (NLB) — L4 TCP/UDP с минимальной задержкой. Classic ELB устарел и не рекомендуется для новых проектов.

Почему стоит выбрать ALB вместо NLB?

ALB лучше NLB для HTTP/HTTPS: он поддерживает интеллектуальную маршрутизацию, интеграцию с WAF и отдачу статического контента. NLB незаменим для TCP-сервисов, требующих статических IP и минимальной задержки. Если у вас веб-приложение на React/Vue или API на Node.js — ваш выбор ALB. Для GameServer или VoIP — NLB. Мы часто комбинируем их: ALB для веба, NLB для WebSocket.

Характеристика ALB (L7) NLB (L4)
Протоколы HTTP/HTTPS/gRPC TCP/UDP/TLS
Маршрутизация по пути, заголовку, хосту нет
Интеграция с WAF да нет
Статический IP нет да (через Elastic IP)
Задержка ~2-5 мс <1 мс
Целевые группы EC2, ECS, Lambda, IP EC2, IP, ALB

Как работает ALB с Auto Scaling?

Привяжите target group ALB к Auto Scaling Group. При масштабировании новые инстансы автоматически регистрируются и начинают получать трафик. Health check ALB (путь /health, порог 2 успешных ответов) определяет, когда инстанс готов принимать запросы. Это обеспечивает zero-downtime деплой. Для критичных сервисов используем таргет-группы с deregistration_delay в 30 секунд, чтобы успевающие запросы завершились.

Пошаговая настройка ALB через Terraform

  1. Создайте ALB с указанием security groups и подсетей.
  2. Настройте HTTPS listener с сертификатом ACM и редирект с HTTP.
  3. Определите target groups с health check и stickiness.
  4. Добавьте listener rules для маршрутизации по путям, заголовкам или хостам.
  5. Привяжите target group к вашему сервису (EC2, ECS, Lambda).
  6. Включите access logs и мониторинг.

Полный пример конфигурации ниже.

Application Load Balancer

ALB — стандартный выбор для веб-приложений. Маршрутизирует по пути, хосту, HTTP-заголовкам, методу, query string. Интегрируется с ECS, EKS, Lambda, Auto Scaling Groups. Ниже полная конфигурация с AWS ALB, маршрутизацией и ACM.

# Terraform: полная конфигурация ALB + routing + ACM
resource "aws_lb" "main" {
  name = "myapp-alb"
  internal = false
  load_balancer_type = "application"
  security_groups = [aws_security_group.alb.id]
  subnets = aws_subnet.public[*].id
  enable_deletion_protection = true
  enable_cross_zone_load_balancing = true
  drop_invalid_header_fields = true
  access_logs {
    bucket = aws_s3_bucket.alb_logs.bucket
    prefix = "alb"
    enabled = true
  }
  tags = {
    Name = "myapp-alb"
  }
}

# HTTPS Listener
resource "aws_lb_listener" "https" {
  load_balancer_arn = aws_lb.main.arn
  port = 443
  protocol = "HTTPS"
  ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06"
  certificate_arn = aws_acm_certificate.main.arn
  default_action {
    type = "forward"
    target_group_arn = aws_lb_target_group.web.arn
  }
}

# HTTP → HTTPS redirect
resource "aws_lb_listener" "http" {
  load_balancer_arn = aws_lb.main.arn
  port = 80
  protocol = "HTTP"
  default_action {
    type = "redirect"
    redirect {
      port = "443"
      protocol = "HTTPS"
      status_code = "HTTP_301"
    }
  }
}

# Target Group для веб-приложения
resource "aws_lb_target_group" "web" {
  name = "myapp-web-tg"
  port = 8080
  protocol = "HTTP"
  vpc_id = aws_vpc.main.id
  target_type = "ip" # для ECS Fargate
  health_check {
    enabled = true
    path = "/health"
    healthy_threshold = 2
    unhealthy_threshold = 3
    timeout = 5
    interval = 10
    matcher = "200"
  }
  deregistration_delay = 30
  stickiness {
    type = "lb_cookie"
    cookie_duration = 86400
    enabled = false
  }
}

# API Target Group
resource "aws_lb_target_group" "api" {
  name = "myapp-api-tg"
  port = 3000
  protocol = "HTTP"
  vpc_id = aws_vpc.main.id
  health_check {
    path = "/api/health"
    matcher = "200"
  }
}

# Правила маршрутизации
resource "aws_lb_listener_rule" "api" {
  listener_arn = aws_lb_listener.https.arn
  priority = 10
  action {
    type = "forward"
    target_group_arn = aws_lb_target_group.api.arn
  }
  condition {
    path_pattern {
      values = ["/api/*"]
    }
  }
}

# Маршрут по заголовку (версионирование API)
resource "aws_lb_listener_rule" "api_v2" {
  listener_arn = aws_lb_listener.https.arn
  priority = 5
  action {
    type = "forward"
    target_group_arn = aws_lb_target_group.api_v2.arn
  }
  condition {
    http_header {
      http_header_name = "X-API-Version"
      values = ["2", "2.0"]
    }
  }
}

# Weighted forwarding для Canary deployments
resource "aws_lb_listener_rule" "canary" {
  listener_arn = aws_lb_listener.https.arn
  priority = 20
  action {
    type = "forward"
    forward {
      target_group {
        arn = aws_lb_target_group.web_stable.arn
        weight = 95
      }
      target_group {
        arn = aws_lb_target_group.web_canary.arn
        weight = 5
      }
      stickiness {
        enabled = true
        duration = 3600
      }
    }
  }
  condition {
    path_pattern {
      values = ["/*"]
    }
  }
}

# Сертификат ACM
resource "aws_acm_certificate" "main" {
  domain_name = "example.com"
  subject_alternative_names = ["*.example.com"]
  validation_method = "DNS"
  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_route53_record" "cert_validation" {
  for_each = {
    for dvo in aws_acm_certificate.main.domain_validation_options : dvo.domain_name => {
      name = dvo.resource_record_name
      record = dvo.resource_record_value
      type = dvo.resource_record_type
    }
  }
  zone_id = aws_route53_zone.main.zone_id
  name = each.value.name
  type = each.value.type
  ttl = 60
  records = [each.value.record]
}

resource "aws_acm_certificate_validation" "main" {
  certificate_arn = aws_acm_certificate.main.arn
  validation_record_fqdns = [for record in aws_route53_record.cert_validation : record.fqdn]
}

ALB + WAF

Подключаем WAF для защиты от OWASP top-10 и rate limiting.

resource "aws_wafv2_web_acl_association" "alb" {
  resource_arn = aws_lb.main.arn
  web_acl_arn = aws_wafv2_web_acl.main.arn
}

resource "aws_wafv2_web_acl" "main" {
  name = "myapp-waf"
  scope = "REGIONAL"

  default_action {
    allow {}
  }

  rule {
    name = "AWSManagedRulesCommonRuleSet"
    priority = 1

    override_action {
      none {}
    }

    statement {
      managed_rule_group_statement {
        name = "AWSManagedRulesCommonRuleSet"
        vendor_name = "AWS"
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name = "CommonRuleSet"
      sampled_requests_enabled = true
    }
  }

  rule {
    name = "RateLimit"
    priority = 2

    action {
      block {}
    }

    statement {
      rate_based_statement {
        limit = 2000
        aggregate_key_type = "IP"
      }
    }

    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name = "RateLimit"
      sampled_requests_enabled = true
    }
  }

  visibility_config {
    cloudwatch_metrics_enabled = true
    metric_name = "MyAppWAF"
    sampled_requests_enabled = true
  }
}

ALB + ECS Fargate

Пример интеграции ALB с Fargate: сервис автоматически регистрируется в target group.

resource "aws_ecs_service" "app" {
  name = "myapp-web"
  cluster = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.app.arn
  desired_count = 3
  launch_type = "FARGATE"

  network_configuration {
    subnets = aws_subnet.private[*].id
    security_groups = [aws_security_group.app.id]
    assign_public_ip = false
  }

  load_balancer {
    target_group_arn = aws_lb_target_group.web.arn
    container_name = "web"
    container_port = 8080
  }

  deployment_circuit_breaker {
    enable = true
    rollback = true
  }

  deployment_controller {
    type = "ECS"
  }

  depends_on = [aws_lb_listener.https]
}

Network Load Balancer

NLB для TCP/UDP с статическими IP и минимальной задержкой.

resource "aws_lb" "nlb" {
  name = "myapp-nlb"
  internal = false
  load_balancer_type = "network"
  subnets = aws_subnet.public[*].id
  enable_cross_zone_load_balancing = true
}

resource "aws_lb_listener" "nlb_tls" {
  load_balancer_arn = aws_lb.nlb.arn
  port = 443
  protocol = "TLS"
  ssl_policy = "ELBSecurityPolicy-TLS13-1-2-2021-06"
  certificate_arn = aws_acm_certificate.main.arn
  default_action {
    type = "forward"
    target_group_arn = aws_lb_target_group.nlb_tcp.arn
  }
}

resource "aws_lb_target_group" "nlb_tcp" {
  name = "myapp-nlb-tg"
  port = 8080
  protocol = "TCP"
  vpc_id = aws_vpc.main.id
  health_check {
    protocol = "HTTP"
    path = "/health"
    healthy_threshold = 2
    unhealthy_threshold = 2
    interval = 10
  }
}

Мониторинг ALB

Ключевые CloudWatch метрики: RequestCount, ActiveConnectionCount, TargetResponseTime (p50/p95/p99), HTTPCode_ELB_5XX_Count, HealthyHostCount, UnHealthyHostCount. Ставим алерты на 5xx и высокую задержку.

resource "aws_cloudwatch_metric_alarm" "target_5xx" {
  alarm_name = "alb-5xx-errors"
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods = 2
  metric_name = "HTTPCode_Target_5XX_Count"
  namespace = "AWS/ApplicationELB"
  period = 60
  statistic = "Sum"
  threshold = 10
  alarm_actions = [aws_sns_topic.alerts.arn]
  dimensions = {
    LoadBalancer = aws_lb.main.arn_suffix
  }
}

resource "aws_cloudwatch_metric_alarm" "latency" {
  alarm_name = "alb-high-latency"
  comparison_operator = "GreaterThanThreshold"
  evaluation_periods = 3
  metric_name = "TargetResponseTime"
  namespace = "AWS/ApplicationELB"
  period = 60
  extended_statistic = "p95"
  threshold = 2.0
  alarm_actions = [aws_sns_topic.alerts.arn]
  dimensions = {
    LoadBalancer = aws_lb.main.arn_suffix
  }
}

Что входит в работу

  • Проект балансировки: выбор типа (ALB/NLB), схема сети.
  • Написание Terraform-кода с target groups, listener rules, ACM, WAF.
  • Настройка мониторинга и алертов.
  • Интеграция с CI/CD и Auto Scaling.
  • Документация по эксплуатации и обучение команды.

Срок реализации

Конфигурация Срок
ALB + Target Group + HTTPS 1–2 дня
Маршрутизация по путям/заголовкам +1 день
WAF + rate limiting +1–2 дня
Canary deployment через weighted forwarding +1 день
Полная Terraform конфигурация с мониторингом 3–5 дней

Типичные ошибки при настройке

  • Не настроен health check — инстансы получают трафик до готовности.
  • Отсутствует deletion protection — случайное удаление ALB.
  • Неправильный SSL policy — уязвимости.
  • Click-through на WAF — не включены managed rules.

Мы гарантируем стабильность и скорость. Получите консультацию по настройке ALB для вашего проекта. Свяжитесь с нами — рассчитаем сроки под ваш проект. Документация AWS ALB поможет глубже разобраться в возможностях.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060