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

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

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

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

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

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

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    982
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1241
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995

Настройка балансировки нагрузки через 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 поможет глубже разобраться в возможностях.