Terraform: инфраструктура на уровне кода | страница 57



Целевые группы. Один или несколько серверов, которые принимают запросы от балансировщика нагрузки. Целевая группа также следит за работоспособностью этих серверов и шлет запросы только «здоровым» узлам.

Рис. 2.11. Обзор Application Load Balancer (ALB)

Первым делом нужно создать сам балансировщик ALB, используя ресурс aws_lb:

resource "aws_lb" "example" {

  name               = "terraform-asg-example"

  load_balancer_type = "application"

  subnets            = data.aws_subnet_ids.default.ids

}

Обратите внимание, что параметр subnets настраивает балансировщик нагрузки для использования всех подсетей в вашем облаке VPC по умолчанию с помощью источника данных aws_subnet_ids33. Балансировщики нагрузки в AWS состоят не из одного, а сразу из нескольких серверов, которые могут работать в разных подсетях (и, следовательно, в отдельных вычислительных центрах). AWS автоматически масштабирует количество балансировщиков в зависимости от трафика и отрабатывает отказ, если один из этих серверов выйдет из строя. Таким образом, вы получаете как масштабируемость, так и высокую доступность.

Следующим шагом будет определение прослушивателя для этого ALB с помощью ресурса aws_lb_listener:

resource "aws_lb_listener" "http" {

  load_balancer_arn = aws_lb.example.arn

  port              = 80

  protocol          = "HTTP"

  # По умолчанию возвращает простую страницу с кодом 404

  default_action {

    type = "fixed-response"

    fixed_response {

      content_type = "text/plain"

      message_body = "404: page not found"

      status_code  = 404

    }

  }

}

Этот прослушиватель настраивает ALB для прослушивания стандартного HTTP-порта (80), использования HTTP-протокола и возвращения простой страницы с кодом 404 в случае, если запрос не соответствует ни одному из правил прослушивания.

Стоит отметить, что по умолчанию для всех ресурсов AWS, включая ALB, закрыт входящий и исходящий трафик, поэтому нужно создать новую группу безопасности специально для балансировщика нагрузки. Эта группа должна разрешать входящие запросы на порт 80, чтобы вы могли обращаться к ALB по HTTP, а также исходящие запросы на всех портах, чтобы балансировщик мог проверять работоспособность:

resource "aws_security_group" "alb" {

  name = "terraform-example-alb"

  # Разрешаем все входящие HTTP-запросы

  ingress {

    from_port   = 80

    to_port     = 80

    protocol    = "tcp"

    cidr_blocks = ["0.0.0.0/0"]

  }

  # Разрешаем все исходящие запросы

  egress {