Amazon web services Terraform模块参数VAR是必需的,但未找到定义

Amazon web services Terraform模块参数VAR是必需的,但未找到定义,amazon-web-services,terraform,terraform-modules,terraform-aws-modules,Amazon Web Services,Terraform,Terraform Modules,Terraform Aws Modules,我有地形模块来提供AWS资源。在地形图之后,我看到以下错误: 错误:缺少必需的参数 在main.tf行的模块“ecs任务执行角色”中: 113:模块“ecs任务执行角色”{ 参数“iam_role_name”是必需的,但未找到定义 这是我在。/terraform/modules/iam/ecs_iam.tf中定义的资源: resource "aws_iam_role" "iam--task-execution-role" { name

我有地形模块来提供AWS资源。在
地形图之后
,我看到以下错误:

错误:缺少必需的参数 在main.tf行的模块“ecs任务执行角色”中: 113:模块“ecs任务执行角色”{ 参数“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
}
variable "iam_role_name" {
  type = string
}
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"

}
变量在
。/terraform/modules/iam/Variables.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
}
variable "iam_role_name" {
  type = string
}
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"

}
模块位于
。/terraform/production/main.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
}
variable "iam_role_name" {
  type = string
}
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"

}
感谢您的帮助。

在您的示例中:

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\u role\u name
变量的值传递给
ecs task execution role
模块。正上方的
iam jo task execution role
模块显示了如何将变量传递给模块。

结果是我误解了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
中声明的每个资源定义一个模块。这只是几个资源的分组(打包)。

哪个文件用于
。/modules/iam
中的模块?上面的路径不正确。是的,它是
。/modules/iam