#amazon-web-services #terraform #amazon-elb
#amazon-web-services #terraform #amazon-elb
Вопрос:
Обновление: terraform destroy
ELB не удаляется, но команда apply пытается создать заново. Простое выполнение команды terraform apply
пытается воссоздать ELB, даже если в модуль ELB не было внесено никаких изменений.
В чем причина этого?
Вот ошибка, которую я получаю:
Error: Error creating ELB: DuplicateLoadBalancerName: Load Balancer named myELB already exists and it is configured with different parameters. status code: 400, request id: 123456789-67b1-4fbd-95e3-17f693cdcf75
Вот код ELB:
# Create ELB
resource "aws_elb" "myELB" {
depends_on = [
aws_instance.webservers,
]
for_each = toset(var.public_subnets_names)
name = "myELB"
subnets = [data.aws_subnet.public_subnet_ids[each.value].id]
listener {
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
health_check {
healthy_threshold = 2
unhealthy_threshold = 2
timeout = 3
target = "HTTP:8080/"
interval = 30
}
instances = data.aws_instances.webservers.ids
cross_zone_load_balancing = true
idle_timeout = 400
connection_draining = true
connection_draining_timeout = 400
tags = {
Name = "myELB"
}
}
Вот источник данных выглядит так:
# Get Public Subnets ID's
data "aws_subnet" "public_subnet_ids" {
depends_on = [
aws_subnet.subnets,
]
for_each = toset(var.public_subnets_names)
filter {
name = "tag:Name"
values = [each.value]
}
}
Комментарии:
1. Обновлен вопрос.. ELB не удаляется при выполнении команды
terraform destroy
. Даже в других случаях, просто запуск командыterraform apply
пытается воссоздать2. Итак, вы создаете несколько ALB, по одному в каждой подсети? Это специально?
Ответ №1:
Это происходит потому, что вы создаете несколько ALB, по одному в каждой подсети с тем же именем myALB
. Это связано со следующей строкой:
for_each = toset(var.public_subnets_names)
Не уверен, что это ваше намерение или ошибка, поэтому неясно, чего вы хотите достичь.
Обновить:
Обычно вы просто используете подсети:
subnets = data.aws_subnet_ids.subnets.ids
где вы должны использовать aws_subnet_ids для получения идентификаторов ваших подсетей.
Комментарии:
1. Итак, for_each запускает ресурс дважды? Я думал, что только count запускает ресурсы дважды. Здесь я хотел перебрать
var.public_subnets_names
, получить идентификаторы и вставить в подсети. Какой подход был бы лучшим? Я обновил вопрос с источником данных.var.public_subnets_names
это список имен подсетей2. Я не использовал count, поскольку count будет запускать ресурс указанное количество раз. Похоже, что for_each делает то же самое?
3. Может быть, использовать цикл for?