Невозможно привязать целевой идентификатор (конфигурация запуска) к целевой группе балансировщика сетевой нагрузки в Terraform

Я настраиваю сценарий Terraform для создания настройки HA rabbitmq с группами автоматического масштабирования для всех экземпляров. Для создания группы автоматического масштабирования я создаю конфигурацию запуска, которая создаст автоматически масштабируемый экземпляр.

Я хочу использовать балансировщик сетевой нагрузки перед этим экземпляром, поэтому мне нужно создать целевую группу и вложения целевой группы. Здесь я должен указать target_id(идентификатор конфигурации запуска), чтобы присоединить его к целевой группе. Но при применении скрипта выдает следующую ошибку:

Error registering targets with target group: ValidationError: Instance ID 'rabbit' is not valid status code: 400, request id: 1cad37a8-b1da-416a-bc11-f50ae6b83cd2

Скрипт Terraform

resource "aws_lb" "rabbit" {
  name = "${local.cluster_name}-lb"
  load_balancer_type = "network"
  internal = "false"
  subnets = aws_subnet.subnet.*.id
  enable_cross_zone_load_balancing = "true"
  tags = {
    Name = "${local.cluster_name}-lb"
  }
}

resource "aws_lb_listener" "http" {
    load_balancer_arn = aws_lb.rabbit.arn
    protocol = "TCP"
    port = "80"

    default_action {
        type = "forward"
        target_group_arn = aws_lb_target_group.TCP80.arn
    }
}

resource "aws_lb_target_group" "TCP80" {
  name = "${local.cluster_name}-TCP80"
  vpc_id = aws_vpc.vpc.id
  target_type = "instance"

  protocol = "TCP"
  port = "80"

  health_check {
    protocol = "TCP"
    port     = 80

    # NLBs required to use same healthy and unhealthy thresholds
    healthy_threshold   = 3
    unhealthy_threshold = 3

    # Interval between health checks required to be 10 or 30
    interval = 10
  }
}

resource "aws_lb_target_group_attachment" "TCP80" {
  count = var.controller_count
  target_group_arn = aws_lb_target_group.TCP80.arn
  target_id        = aws_launch_configuration.rabbit.id
  port             = 80
}

resource "aws_launch_configuration" "rabbit" {
  name = "rabbit"
  image_id    = data.aws_ami.ubuntu.id
  instance_type = var.instance_type
  key_name    = "key_name"

  security_groups = [
      aws_security_group.rabbit-nodes.id,
  ]
}

resource "aws_autoscaling_group" "rabbit-node" {
  #name = "${var.name}-${var.environment_tag}-"
  name ="rabbit"
  #count = var.instance_count
  launch_configuration = aws_launch_configuration.rabbit.name
  vpc_zone_identifier  = aws_subnet.subnet.*.id
  min_size             = var.min_size
  max_size             = var.max_size
  desired_capacity     = var.desired_size
  termination_policies = ["OldestLaunchConfiguration", "Default"]
  #load_balancers       = ["${aws_lb.rabbit}"]

  health_check_type         = "EC2"
  health_check_grace_period = 300

  lifecycle {
    create_before_destroy = true
  }
}

1 ответ

Решение

В aws_lb_target_group_attachment ресурс предназначен для подключения существующих экземпляров EC2, задач ECS или лямбда-функций к целевой группе балансировщика нагрузки:

target_id(Обязательно) ID цели. Это идентификатор экземпляра для экземпляра или идентификатор контейнера для контейнера ECS. Если тип цели - ip, укажите IP-адрес. Если целевой тип - лямбда, укажите аргумент лямбда.

Если вы хотите, чтобы все ваши экземпляры в группе автомасштабирования автоматически присоединялись к целевой группе, вы можете указать это с помощью target_group_arns параметр на aws_autoscaling_groupресурс:

resource "aws_autoscaling_group" "rabbit-node" {
  #name = "${var.name}-${var.environment_tag}-"
  name ="rabbit"
  #count = var.instance_count
  launch_configuration = aws_launch_configuration.rabbit.name
  vpc_zone_identifier  = aws_subnet.subnet.*.id
  min_size             = var.min_size
  max_size             = var.max_size
  desired_capacity     = var.desired_size
  termination_policies = ["OldestLaunchConfiguration", "Default"]

  target_group_arns    = [aws_lb_target_group.TCP80.arn]

  health_check_type         = "EC2"
  health_check_grace_period = 300

  lifecycle {
    create_before_destroy = true
  }
}
Другие вопросы по тегам