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



со следующим синтаксисом:

local.

Используйте этот синтаксис для обновления прослушивателя балансировщика нагрузки:

resource "aws_lb_listener" "http" {

  load_balancer_arn = aws_lb.example.arn

  port              = local.http_port

  protocol          = "HTTP"

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

  default_action {

    type = "fixed-response"

    fixed_response {

      content_type = "text/plain"

      message_body = "404: page not found"

      status_code  = 404

    }

  }

}

и всех групп безопасности в модуле, включая ту, которая относится к балансировщику:

resource "aws_security_group" "alb" {

  name = "${var.cluster_name}-alb"

  ingress {

    from_port   = local.http_port

    to_port     = local.http_port

    protocol    = local.tcp_protocol

    cidr_blocks = local.all_ips

  }

  egress {

    from_port   = local.any_port

    to_port     = local.any_port

    protocol    = local.any_protocol

    cidr_blocks = local.all_ips

  }

}

Локальные переменные упрощают чтение и поддержку кода, поэтому используйте их как можно чаще.


Выходные переменные модуля

Мощной особенностью групп ASG является возможность сконфигурировать их для увеличения и уменьшения количества запущенных серверов в зависимости от нагрузки. Для этого можно воспользоваться запланированным действием, которое будет менять размер кластера в заданное время суток. Например, если ваш кластер испытывает повышенную нагрузку в рабочее время, вы можете запланировать увеличение и уменьшение количества серверов на 9 утра и 5 вечера соответственно.

Запланированное действие, определенное в модуле webserver-cluster, относится как к тестовой, так и к промышленной среде. Поскольку вам не нужно подобного рода масштабирование во время тестирования, можете пока определить график автомасштабирования прямо в промышленной конфигурации. В главе 5 вы познакомитесь с условным определением ресурсов, что позволит вам переместить запланированное действие в модуль webserver-cluster.

Чтобы определить запланированное действие, добавьте следующих два ресурса aws_autoscaling_schedule в файл prod/services/webserver-cluster/main.tf:

resource "aws_autoscaling_schedule" "scale_out_during_business_hours" {

  scheduled_action_name = "scale-out-during-business-hours"

  min_size              = 2

  max_size              = 10

  desired_capacity      = 10

  recurrence            = "0 9 * * *"

}

resource "aws_autoscaling_schedule" "scale_in_at_night" {

  scheduled_action_name = "scale-in-at-night"