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

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

Ошибка: отсутствует обязательный аргумент в строке 113 main.tf, в модуле "ecs-task-execution-role": 113: module "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"

}

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

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. Это всего лишь группировка (упаковка) нескольких ресурсов.

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

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 module прямо над ним показывает, как передать переменную в модуль.

Другие вопросы по тегам