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



  type        = number

}

variable "max_size" {

  description = "The maximum number of EC2 Instances in the ASG"

  type        = number

}

Дальше нужно обновить конфигурацию запуска в файле modules/services/webserver-cluster/main.tf, присвоив параметру instance_type новую входную переменную var.instance_type:

resource "aws_launch_configuration" "example" {

  image_id        = "ami-0c55b159cbfafe1f0"

  instance_type   = var.instance_type

  security_groups = [aws_security_group.instance.id]

  user_data       = data.template_file.user_data.rendered

  # Требуется при использовании группы автомасштабирования

  # в конфигурации запуска.

  # https://www.terraform.io/docs/providers/aws/r/launch_configuration.html

  lifecycle {

    create_before_destroy = true

  }

}

Похожим образом следует обновить определение ASG в том же файле. Присвойте параметрам min_size и max_size входные переменные var.min_size и var.max_size соответственно:

resource "aws_autoscaling_group" "example" {

  launch_configuration = aws_launch_configuration.example.name

  vpc_zone_identifier  = data.aws_subnet_ids.default.ids

  target_group_arns    = [aws_lb_target_group.asg.arn]

  health_check_type    = "ELB"

  min_size = var.min_size

  max_size = var.max_size

  tag {

    key                 = "Name"

    value               = var.cluster_name

    propagate_at_launch = true

  }

}

Теперь кластер в тестовой среде (stage/services/webserver-cluster/main.tf) можно сделать поменьше и подешевле, указав "t2.micro" для instance_type и 2 для min_size и max_size:

module "webserver_cluster" {

  source = "../../../modules/services/webserver-cluster"

  cluster_name           = "webservers-stage"

  db_remote_state_bucket = "(YOUR_BUCKET_NAME)"

  db_remote_state_key    = "stage/data-stores/mysql/terraform.tfstate"

  instance_type = "t2.micro"

  min_size      = 2

  max_size      = 2

}

В то же время в промышленной среде можно использовать более крупный тип серверов (например, m4.large) с большим количеством серверов и памяти. Имейте в виду, что этот тип не входит в бесплатный тариф AWS, поэтому, если кластер вам нужен только в образовательных целях и вы не хотите платить, оставьте в поле instance_type значение "t2.micro". Параметру max_size можно присвоить 10, что позволит кластеру расширяться и сжиматься в зависимости от нагрузки (не волнуйтесь, изначально он запустится с двумя серверами):

module "webserver_cluster" {

  source = "../../../modules/services/webserver-cluster"