Вы ссылаетесь на неправильные ресурсы в обоих случаях.
С первой ошибкой ваш слушатель определяется как:
resource "aws_alb_listener" "frontend" {
load_balancer_arn = "${aws_alb.frontend.arn}"
port = "${local.https_port}"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-TLS-1-2-2017-01"
default_action {
target_group_arn = "${aws_alb.frontend.arn}"
type = "forward"
}
}
Обратите внимание, что default_action
занимает target_group_arn
, поэтому вам нужно указать его на целевую группу, а не на сам балансировщик нагрузки.
Так что вместо этого вы должны использовать:
resource "aws_alb_listener" "frontend" {
load_balancer_arn = "${aws_alb.frontend.arn}"
port = "${local.https_port}"
protocol = "HTTPS"
ssl_policy = "ELBSecurityPolicy-TLS-1-2-2017-01"
default_action {
target_group_arn = "${aws_alb_target_group.frontend.arn}"
type = "forward"
}
}
Поскольку у вас определено только одно правило прослушивателя, вы также можете удалить ресурс aws_alb_listener_rule
, поскольку он в любом случае выполняет то же действие, что и действие по умолчанию для прослушивателя. Вы определяете правила отдельно, только если вы хотите, чтобы разный трафик (по хосту или по пути) направлялся в разные целевые группы.
Ваша вторая ошибка связана с попыткой присоединить группу автоматического масштабирования к классу ELB с помощью с использованием параметра load_balancers
. В качестве aws_autoscaling_group
документации по ресурсам упоминайте, что вы должны использовать target_group_arns
вместо:
resource "aws_autoscaling_group" "backend" {
name = "${local.cluster_name}-asg"
launch_configuration = "${aws_launch_configuration.backend.id}"
availability_zones = ["${data.aws_availability_zones.all.names}"]
target_group_arns = ["${aws_alb_target_group.frontend.arn}"]
health_check_type = "ELB"
min_size = "${var.min_size}"
max_size = "${var.max_size}"
// This resource type uses different tags specification format.
// A list comp over the locals tags map would sure come in handy to keep
// things DRY.
tags = [
{
key = "System"
value = "${var.tags["System"]}"
propagate_at_launch = true
},
{
key = "Environment"
value = "${local.tags["Environment"]}"
propagate_at_launch = true
},
{
key = "Owner"
value = "${local.tags["Owner"]}"
propagate_at_launch = true
},
{
key = "Description"
value = "${local.tags["Description"]}"
propagate_at_launch = true
}
]
}
Это автоматически присоединит группу автоматического масштабирования к целевой группе ALB, так что вы также можете избавиться от aws_autoscaling_attachment
ресурса , который делает то же самое. Обычно вы используете ресурс aws_autoscaling_attachment
только в том случае, если вы определили целевую группу ALB и свою группу автоматического масштабирования по отдельности и вам необходимо связать их между собой.