Требуется аргумент VAR для модулей Terraform, но определение не найдено

#amazon-web-services #terraform #terraform-modules #terraform-aws-modules

#amazon-web-services #terraform #terraform-modules #terraform-aws-modules

Вопрос:

У меня есть модули Terraform для предоставления ресурсов AWS. После terraform plan я вижу следующую ошибку:

Ошибка: отсутствует требуемый аргумент на main.tf строка 113, в модуле «ecs-task-execution-role»: 113: модуль «ecs-task-execution-role» {Требуется аргумент «iam_role_name», но определение не найдено.

Вот мой ресурс, определенный в ../terraform/modules/iam/ecs_iam.tf :

 resource "aws_iam_role" "iam--task-execution-role" {
  name               = var.iam_role_name
  assume_role_policy = data.aws_iam_policy_document.ecs-task-assume-role.json
}

data "aws_iam_policy_document" "ecs-task-assume-role" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["ecs-tasks.amazonaws.com"]
    }
  }
}

data "aws_iam_policy" "ecs-task-execution-role" {
  arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
}

# Attach the above policy to the execution role.

resource "aws_iam_role_policy_attachment" "ecs-task-execution-role" {
  role       = aws_iam_role.iam-task-execution-role.name
  policy_arn = data.aws_iam_policy.ecs-task-execution-role.arn
}
  

Переменные определяются в ../terraform/modules/iam/variables.tf :

 variable "iam_role_name" {
  type = string
}
  

Модуль находится в ../terraform/production/main.tf :

 module "iam-jo-task-execution-role" {

  source = "../modules/iam"

  iam_role_name = "iam-jo-task-execution-role"

}

# Attach the above policy to the execution role.

module "ecs-task-execution-role" {

  source = "../modules/iam"

}
  

Любая помощь приветствуется.

Комментарии:

1. В каких файлах находится модуль ../modules/iam ?

2. Путь был указан неверно выше. Да, это ../modules/iam .

Ответ №1:

В вашем примере:

 module "iam-jo-task-execution-role" {

  source = "../modules/iam"

  iam_role_name = "iam-jo-task-execution-role"

}

# Attach the above policy to the execution role.

module "ecs-task-execution-role" {

  source = "../modules/iam"

}
  

Вы не передаете значение iam_role_name переменной в ecs-task-execution-role модуль. iam-jo-task-execution-role Модуль прямо над ним показывает, как передать переменную в модуль.

Ответ №2:

Оказывается, я неправильно понял ресурсы и модули в Terraform.

В ../terraform/production/main.tf файле, который объявляет использование ресурсов, найденных в исходном ../modules/iam коде, мне нужен был следующий синтаксис:

 module "iam-jo-task-execution-role" {

  source = "../modules/iam"

  iam_role_name = "iam-jo-task-execution-role"

}
  

Нет необходимости определять модуль для каждого ресурса, объявленного в ../terraform/modules/iam/ecs_iam.tf . Это просто группировка (упаковка) нескольких ресурсов.