Terraform Autoscaling Group - Почему не запущены никакие экземпляры?

Я пытаюсь настроить Application Load Balancer, который указывает на группу автомасштабирования, поддерживающую группу веб-обозревателей, использующих terraform следующим образом:

##################################################################
# Application Load Balancer
##################################################################

module "lb" {
  source  = "terraform-aws-modules/alb/aws"
  version = "~> 5.0"

  name               = "server-load-balancer"
  internal           = false
  load_balancer_type = "application"

  vpc_id          = module.vpc.vpc_id
  security_groups = [module.lb-security-group.this_security_group_id]
  subnets         = module.vpc.public_subnets

  //  # See notes in README (ref: https://github.com/terraform-providers/terraform-provider-aws/issues/7987)
  //  access_logs = {
  //    bucket = module.log_bucket.this_s3_bucket_id
  //  }



  http_tcp_listeners = [
    # Forward action is default, either when defined or undefined
    {
      port               = 80
      protocol           = "HTTP"
      target_group_index = 0
      # action_type        = "forward"
    },

  ]



  target_groups = [
    {
      # name                 = "server-alb"
      backend_protocol     = "HTTP"
      backend_port         = 8080
      target_type          = "instance"
      deregistration_delay = 10
      vpc_id               = module.vpc.vpc_id
      health_check = {
        enabled             = true
        interval            = 30
        path                = "/"
        port                = "8080"
        healthy_threshold   = 3
        unhealthy_threshold = 3
        timeout             = 6
        protocol            = "HTTP"
        matcher             = "200-299"
      }
      tags = {
        InstanceTargetGroupTag = "webservers"
      }
    },
  ]

  tags = {
    Name = "Load Balancer"
  }

}

##################################################################
# Security Groups
##################################################################

module "lb-security-group" {
  source = "terraform-aws-modules/security-group/aws"

  name        = "load-balancer-security-group"
  description = "Security group for the Application Load Balancer on the public subnet."
  vpc_id      = module.vpc.vpc_id

  ingress_cidr_blocks = ["0.0.0.0/0"]
  ingress_rules       = ["ssh-tcp", "http-80-tcp", "https-443-tcp"]
  egress_rules        = ["all-all"]
  tags = {
    Name        = "Security Group"
    Environment = var.environment_tag
  }
}


module "autoscaler-security-group" {
  source = "terraform-aws-modules/security-group/aws"

  name        = "autoscaler-security-group"
  description = "Security group for the autoscaler on the private subnet."
  vpc_id      = module.vpc.vpc_id

  ingress_cidr_blocks = var.private_subnet_cidrs
  ingress_rules       = ["http-8080-tcp", "ssh-tcp", "http-80-tcp", "https-443-tcp"]
  egress_rules = ["all-all"]
  tags = {
    Name        = "Security Group"
    Environment = var.environment_tag
  }
}


##################################################################
# Launch configurations and autoscaling group
##################################################################

module "autoscaler" {

  source  = "terraform-aws-modules/autoscaling/aws"
  version = "~> 3.0"

  name              = "server-autoscaler"
  enable_monitoring = true

  # Launch configuration
  #
  # launch_configuration = "my-existing-launch-configuration" # Use the existing launch configuration
  # create_lc = false # disables creation of launch configuration
  lc_name = "server-lc"

  image_id                     = data.aws_ami.server.id
  instance_type                = var.instance_type
  security_groups              = [module.autoscaler-security-group.this_security_group_id]
  target_group_arns            = module.lb.target_group_arns
  associate_public_ip_address  = false
  recreate_asg_when_lc_changes = true
  force_delete                 = false


  user_data = data.template_file.init.rendered

  root_block_device = [
    {
      volume_size = "5"
      volume_type = "gp2"
    },
  ]

  # Auto scaling group
  asg_name            = "server-asg"
  vpc_zone_identifier = module.vpc.private_subnets
  health_check_type   = "EC2"
  # Time in Millisec
  health_check_grace_period = 300
  min_size                  = 1
  max_size                  = 2
  desired_capacity          = 1
  min_elb_capacity = 1
  wait_for_capacity_timeout = 0

  # service_linked_role_arn   = aws_iam_service_linked_role.autoscaling.arn

  tags = [
    {
      key                 = "Environment"
      value               = var.environment_tag
      propagate_at_launch = true
    },
    {
      key                 = "Project"
      value               = var.project
      propagate_at_launch = true
    },
  ]
}

Как видите, я указываю:

  # Auto scaling group
  asg_name            = "server-asg"
  vpc_zone_identifier = module.vpc.private_subnets
  health_check_type   = "EC2"
  # Time in Millisec
  health_check_grace_period = 300
  min_size                  = 1
  max_size                  = 2
  desired_capacity          = 1
  min_elb_capacity = 1
  wait_for_capacity_timeout = 0

в группе автомасштабирования, что, как я думал, означало, что будет запущен и обслуживается как минимум 1 экземпляр, и что terraform будет ждать, пока экземпляр станет работоспособным, прежде чем двигаться дальше. Однако я обнаружил, что terraform завершается успешно, но в группе автомасштабирования никогда не запускаются экземпляры, поэтому, когда я перехожу по URL-адресу, я получаю ошибку 503.

Я вижу в консоли AWS, что могу регистрировать цели, но я хочу делать все с помощью terraform. Я просмотрел пример на github здесь, и я действительно не вижу ничего, что они делают по-другому.

Почему в моей группе автомасштабирования не запускаются никакие экземпляры? Любая помощь будет оценена по достоинству.




Ответы (1)


Я попытался запустить ваш код в своей песочнице.

Я заметил, что экземпляры не запускаются из-за небольшого размера тома, который вы используете. Я получал ошибку в консоли ASG:

Запуск нового экземпляра EC2. Причина состояния: объем размером 5 ГБ меньше, чем снимок snap-028531a83139c57d1, ожидаемый размер ›= 8 ГБ. Не удалось запустить экземпляр EC2.

Использование 8 ГБ было достаточно для запуска экземпляра в ASG:

  root_block_device = [
    {
      volume_size = "8"
      volume_type = "gp2"
    },
  ]
person Marcin    schedule 27.07.2020
comment
@ guribe94 Я нашел их в консоли EC2, в меню AutoScaling Group, в истории активности. Я использую консоль старого стиля, а не новую. - person Marcin; 27.07.2020
comment
@ guribe94 Хорошая новость в том, что ваш код работает после изменения размера. Очевидно, мне пришлось добавить много недостающих данных, чтобы заставить его работать (ваш код неполный), но ключевой проблемой был размер 5GB. - person Marcin; 27.07.2020