_Esta edición fue abierta originalmente por @plotniku como hashicorp/terraform#15247. Se migró aquí como parte de la división del proveedor . El cuerpo original del problema se encuentra a continuación._
Hola,
Agregué dos máquinas virtuales con aws_instance y usé el atributo "recuento". También me gustaría agregar en el futuro dos nuevas máquinas virtuales al grupo objetivo, por lo que necesito especificar una lista de máquinas virtuales para "target_id", sin embargo, los recursos realizados con el conteo no existen en la ejecución del plan. Mostrar error de terraformación
[ root@ip-100-79-13-128 2_vpc]# versión de terraformación
Terraform v0.9.8
resource "aws_instance" "web" {
count = "2"
ami = "${var.ec2["ami"]}"
instance_type = "${var.ec2["instance_type"]}"
key_name = "${var.ec2["key"]}"
subnet_id = "${element(aws_subnet.private-subnets.*.id, count.index)}"
vpc_security_group_ids = ["${aws_security_group.private.id}"]
user_data = "${file("script.sh")}"
tags {
Name = "${var.general["owner"]}-web"
configurator = "${var.vpc["tag"]}"
}
depends_on = ["aws_nat_gateway.main"]
}
resource "aws_alb" "app" {
name = "${var.general["owner"]}-elb-app"
internal = false
security_groups = ["${aws_security_group.elb.id}"]
subnets = ["${aws_subnet.public-subnets.*.id}"]
enable_deletion_protection = false
tags {
Name = "${var.general["owner"]}-elb-app"
configurator = "terraform"
}
}
resource "aws_alb_target_group" "app_tg_0" {
name = "${var.general["owner"]}-app-tg-0"
port = 80
protocol = "HTTP"
vpc_id = "${aws_vpc.main.id}"
health_check {
healthy_threshold = 2
unhealthy_threshold = 3
timeout = 5
path = "${var.app["elb_hc_uri"]}"
interval = 10
port = "${var.app["listen_port_http"]}"
}
tags {
Name = "${var.general["owner"]}-app-tg-0"
configurator = "terraform"
}
}
resource "aws_alb_target_group" "app_tg_1" {
name = "${var.general["owner"]}-app-tg-1"
port = 80
protocol = "HTTP"
vpc_id = "${aws_vpc.main.id}"
health_check {
healthy_threshold = 2
unhealthy_threshold = 3
timeout = 5
path = "${var.app["elb_hc_uri"]}"
interval = 10
port = "${var.app["listen_port_http"]}"
}
tags {
Name = "${var.general["owner"]}-app-tg-1"
configurator = "terraform"
}
}
resource "aws_alb_listener" "app_listener_0" {
load_balancer_arn = "${aws_alb.app.arn}"
port = "80"
protocol = "HTTP"
default_action {
target_group_arn = "${aws_alb_target_group.app_tg_0.arn}"
type = "forward"
}
}
resource "aws_alb_target_group_attachment" "app_tg_att_0" {
target_group_arn = "${aws_alb_target_group.app_tg_0.arn}"
target_id = "${aws_instance.web.0.id}"
port = 80
}
resource "aws_alb_target_group_attachment" "app_tg_att_1" {
target_group_arn = "${aws_alb_target_group.app_tg_1.arn}"
target_id = "${aws_instance.web.1.id}"
port = 80
}
resource "aws_alb_listener_rule" "static" {
listener_arn = "${aws_alb_listener.app_listener_0.arn}"
priority = 100
action {
type = "forward"
target_group_arn = "${aws_alb_target_group.app_tg_1.arn}"
}
condition {
field = "path-pattern"
values = ["/static/*"]
}
}
[ root@ip-100-79-13-128 2_vpc]# plan de terraformación
Actualizando el estado de Terraform en la memoria antes del plan...
El estado actualizado se usará para calcular este plan, pero no se
persistido en el almacenamiento de estado local o remoto.
Error al ejecutar el plan: se produjeron 1 error(es):
aws_alb_target_group_attachment.app_tg_att_1: se produjeron 1 error(es):
aws_alb_target_group_attachment.app_tg_att_1: no se encontró el recurso 'aws_instance.web' para la variable 'aws_instance.web.1.id'
aws_alb_target_group_attachment debe aceptar
Terraform no quiere aplicar
use la configuración anterior (no he agregado la configuración de la VPC ya que esa parte funciona bien)
No, cuenta de AWS.
Hola,
Yo también me encontré con este problema y me preguntaba si había algún movimiento planeado sobre este tema.
Podría estar equivocado, pero ¿no es una solución simple cambiar el tipo de entrada aceptado para "target_id" de cadena a una lista?
He revisado muchos otros problemas y discusiones en esta área, pero no veo otra solución para esto que no sea usar el código WET y desafiar la política DRY:
resource "aws_lb_target_group_attachment" "attach_http_tg_target1" {
count = "${var.lb_http_listener ? "${length(split(",", var.target_ids)) >= 1 ? "${length(var.http_target_group_names) == "${length(var.http_target_group_ports)}" ? "${length(var.http_target_group_names)}" : 0}" :0}" :0}"
target_group_arn = "${element(aws_lb_target_group.tg_http.*.arn, count.index)}"
target_id = "${element(split(",", var.target_ids), 0)}"
port = "${element(var.http_target_group_ports, count.index)}"
}
resource "aws_lb_target_group_attachment" "attach_http_tg_target2" {
count = "${var.lb_http_listener ? "${length(split(",", var.target_ids)) >= 2 ? "${length(var.http_target_group_names) == "${length(var.http_target_group_ports)}" ? "${length(var.http_target_group_names)}" : 0}" :0}" :0}"
target_group_arn = "${element(aws_lb_target_group.tg_http.*.arn, count.index)}"
target_id = "${element(split(",", var.target_ids), 1)}"
port = "${element(var.http_target_group_ports, count.index)}"
}
resource "aws_lb_target_group_attachment" "attach_http_tg_target3" {
count = "${var.lb_http_listener ? "${length(split(",", var.target_ids)) >= 3 ? "${length(var.http_target_group_names) == "${length(var.http_target_group_ports)}" ? "${length(var.http_target_group_names)}" : 0}" :0}" :0}"
target_group_arn = "${element(aws_lb_target_group.tg_http.*.arn, count.index)}"
target_id = "${element(split(",", var.target_ids), 2)}"
port = "${element(var.http_target_group_ports, count.index)}"
}
no es una solución tan elegante 😀
Experimentando este mismo problema. ¿Algún avance en esto?
Comentario más útil
Experimentando este mismo problema. ¿Algún avance en esto?