Ценю вашу поддержку в решении этой проблемы, у меня есть файл main.tf, как показано ниже
resource "aws_ecs_service" "nodejs-service" {
name = "nodejs-service"
cluster = aws_ecs_cluster.project_cluster.id
task_definition = aws_ecs_task_definition.nodejs.arn
launch_type = "FARGATE"
desired_count = 1
load_balancer {
target_group_arns = module.alb.target_group_arns
container_name = "${aws_ecs_task_definition.nodejs.family}"
container_port = 8080 # Specifying the container port
}
network_configuration {
subnets = var.vpc.public_subnets
assign_public_ip = true
}
}
module "alb" {
source = "terraform-aws-modules/alb/aws"
version = "~> 8.0"
name = var.namespace
load_balancer_type = "application"
vpc_id = var.vpc.vpc_id
subnets = var.vpc.public_subnets
security_groups = [var.sg.lb]
http_tcp_listeners = [
{
port = 80
protocol = "HTTP"
target_group_index = 0
}
]
target_groups = [
{ name_prefix = "nodejs-service"
backend_protocol = "HTTP"
backend_port = 8080
target_type = "instance"
}
]
}
Я получаю сообщение об ошибке
│ Error: Unsupported argument
│
│ on modules/ecs/main.tf line 58, in resource "aws_ecs_service" "nodejs-service":
│ 58: target_group_arns = module.alb.target_group_arns
│
│ An argument named "target_group_arns" is not expected here. Did you mean "target_group_arn"?
Даже если я изменил target_groups в параметрах службы на target_group_arn, я получаю сообщение об ошибке «target_group_arn» не определено также с module.alb.target_groups[0] такая же ошибка появляется с планом терраформирования
load_balancer {
target_group_arn = module.alb.target_groups[0]
container_name = "${aws_ecs_task_definition.nodejs.family}"
container_port = 8080 # Specifying the container port
}
Ошибка:
│ Error: Unsupported attribute
│
│ on modules/ecs/main.tf line 58, in resource "aws_ecs_service" "nodejs-service":
58: target_group_arn = module.alb.target_groups[0]
├────────────────
│ module.alb is a object
This object does not have an attribute named "target_groups".
Согласно файлу main.tf, как я могу выбрать целевую группу, которая определена в модуле alb
Спасибо,
Попробовал: план терраформирования и ожидаемый альбом с целевой группой, указывающей на контейнер nodejs-service
terraform {
required_version = ">= 1.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.27"
}
null = {
source = "hashicorp/null"
version = ">= 2.0"
}
}
}
"target_group_arns"
опция была добавлена в terraform aws provider 2.22
@AhmedOmar, можете ли вы добавить точную версию модуля, версию terraform, а также поставщика terraform для версии AWS?
@MarkoE был обновлен в почтовом модуле версии 5, затем я изменил его на 8 и запустил его с новой версией модуля и terraform 4.27.
@AhmedOmar Вы запустили terraform init после смены версии?
@MarkoE да, как вы можете видеть github.com/terraform-aws-modules/terraform-aws-alb/blob/master/… поэтому он должен принять мой вывод target_group_arns, но все та же ошибка, возможно ли смоделировать этот main.tf с помощью простого определения задачи с вашей стороны? и спасибо за ваши усилия
Вывод из модуля alb представляет собой массив.
В вашем случае это будет module.alb.target_group_arns[0]
Замените его этим кодом
load_balancer {
target_group_arns = module.alb.target_group_arns[0]
container_name = "${aws_ecs_task_definition.nodejs.family}"
container_port = 8080 # Specifying the container port
}
Спасибо Джатин за ваш ответ, теперь я получаю следующую ошибку. Этот объект не имеет атрибута с именем «target_groups».
│ Error: Unsupported argument │ │ on modules/ecs/main.tf line 58, in resource "aws_ecs_service" "nodejs-service": │ 58: target_group_arns = module.alb.target_group_arns[0] │ │ An argument named "target_group_arns" is not expected here. Did you mean "target_group_arn"?
Проверьте версию вашего провайдера terraform aws, я полагаю, это старая версия. Если его старая версия, попробуйте target_group_arn для ресурса ecs. Даже в примере кода это target_group_arn load_balancer { target_group_arn = aws_lb_target_group.foo.arn container_name = "mongo" container_port = 8080 } Registry.terraform.io/providers/hashicorp/aws/latest/docs/…
Служба не может получить доступ к целевой группе в модуле alb, извините, я новичок в terraform, поэтому я применяю некоторые задачи из книги terraform-in-action ссылка, но с ecs fargate не обычный ec2
Почему используется такая старая версия? какая-то конкретная причина? текущая версия модуля использует 8.0 version = "~> 8.0" Попробуйте прочитать этот готический ридми, github.com/terraform-aws-modules/terraform-aws-alb/tree/v8.3.1
Я сделал и изменил версию на 8.0 и поставщика aws на 4, но все равно та же проблема, я создал новый ресурс alb, и теперь он работает
Если вы думаете, что мой ответ поможет кому-то в будущем, проголосуйте за него, чтобы он мог помочь другим в будущем.
Мне нужно 15 репутации, чтобы я мог проголосовать
Проблема не в модуле, а в аргументе, который вы пытаетесь использовать в ресурсе aws_ecs_service. В настоящее время вы устанавливаете его на target_group_arns, в то время как аргумент в единственном числе, то есть target_group_arn [1]:
load_balancer {
target_group_arn = module.alb.target_group_arns[0]
container_name = "${aws_ecs_task_definition.nodejs.family}"
container_port = 8080 # Specifying the container port
}
В примере показана первая целевая группа, возвращенная из модуля, поэтому убедитесь, что вы используете правильную группу.
[1] https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_service#target_group_arn
Сделано, но теперь я получаю это `module.alb is a object` This object does not have an attribute named "target_group".
Вы дословно скопировали и вставили вышеизложенное?
Я скопировал это сейчас, и оно наконец-то работает, большое спасибо @MarkoE
"если я изменил target_groups в параметрах службы" - что вы имеете в виду? Пожалуйста, добавьте код с этим изменением и ПОЛНЫМ сообщением об ошибке.