Problemas ao criar o AutoScaling Group com um balanceador de carga de rede (NLB) no AWS usando o Terraform

2

Estou tentando criar um NLB usando o Terraform v0.11.0 (meu aplicativo não usa HTTP, portanto não posso usar um ALB). Procurando na documentação da Hashcorp, eu poderia criar o seguinte código:

resource "aws_lb" "lb" {
  name = "test"
  internal = false
  enable_deletion_protection = true
  load_balancer_type = "network"
  ip_address_type = "ipv4"
  subnet_mapping {
    subnet_id = "${data.aws_subnet.sn-app-1.id}"
    allocation_id = "${aws_eip.eip-1.id}"
  }
  subnet_mapping {
    subnet_id = "${data.aws_subnet.sn-app-2.id}"
    allocation_id = "${aws_eip.eip-2.id}"
  }
}

resource "aws_lb_target_group" "lbtg" {
  name     = "test"
  port     = "8080"
  protocol = "TCP"
  vpc_id   = "${data.aws_vpc.vpc.id}"
  deregistration_delay = "300"
  health_check {
    interval = "300"
    port = "8080"
    protocol = "TCP"
    timeout = "10"
    healthy_threshold = "10" 
    unhealthy_threshold= "10" 
  }
}

resource "aws_lb_listener" "front_end" {
  load_balancer_arn = "${aws_lb.lb.arn}"
  port              = "8080"
  protocol          = "TCP"
  default_action {
    target_group_arn = "${aws_lb_target_group.lbtg.arn}"
    type             = "forward"
  }
}

resource "aws_autoscaling_group" "asg" {
  name  = "test"
  vpc_zone_identifier = ["${data.aws_subnet.sn-app-1.id}","${data.aws_subnet.sn-app-2.id}"]
  min_size  = 1
  desired_capacity  = 1
  max_size  = 3
  launch_configuration = "${aws_launch_configuration.lc.name}"
  load_balancers  = ["${aws_lb.lb.name}"]
  default_cooldown= 180
  health_check_grace_period = 180
  termination_policies = ["ClosestToNextInstanceHour", "NewestInstance"]
}

Eu corro terraform init e terraform plan -out=plan.json e tudo corre bem, mas depois de executar terraform apply plan.json , o Terraform gasta algum tempo tentando criar o AutoScaling Group e joga algo assim:

aws_ecs_service.ecss: 1 erro (s) ocorrido (s):

  • aws_ecs_service.ecss: InvalidParameterException: O grupo de destino com targetGroupArn arn: aws: elasticloadbalancing: us-east-1: xxxxxx: O targetgroup / test / xxxxxx não possui um balanceador de carga associado. código de status: 400, ID do pedido: b2565334-da9a-11e7-ab5a-8f0bfc9ecd99 "teste"

  • aws_autoscaling_group.asg: 1 erro (s) ocorrido (s):

  • aws_autoscaling_group.asg: Erro ao criar Grupo de AutoScaling: ValidationError: Os Balanceadores de Carga Fornecidos podem não ser válidos. Por favor, verifique se eles existem e tente novamente. código de status: 400, ID do pedido: cf2d4ac6-da9a-11e7-950f-050f1f0711f8

Como posso associar um grupo-alvo a um LB? E por que o Load Balancer não pode ser válido para o Grupo AutoScaling?

    
por Tales Morais 06.12.2017 / 17:58

1 resposta

3

Tente usar a opção target_group_arns no ASG.

resource "aws_autoscaling_group" "asg" {
    name  = "test"
    vpc_zone_identifier = ["${data.aws_subnet.sn-app-1.id}","${data.aws_subnet.sn-app-2.id}"]
    min_size  = 1
    desired_capacity  = 1
    max_size  = 3
    launch_configuration = "${aws_launch_configuration.lc.name}"
    target_group_arns = ["${aws_lb_target_group.lbtg.arn}"]
    default_cooldown= 180
    health_check_grace_period = 180
    termination_policies = ["ClosestToNextInstanceHour", "NewestInstance"]
}
    
por 06.12.2017 / 21:02