【问题标题】:Terraform modules argument VAR is required, but no definition was foundTerraform 模块参数 VAR 是必需的,但未找到定义
【发布时间】:2021-01-29 09:22:43
【问题描述】:

我有 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"

}

任何帮助表示赞赏。

【问题讨论】:

  • 哪个文件用于位于../modules/iam的模块?
  • 上面的路径不对。是的,是../modules/iam

标签: amazon-web-services terraform terraform-modules terraform-aws-modules


【解决方案1】:

原来我误解了 Terraform 中的资源和模块。

在声明使用源../modules/iam 中的资源的../terraform/production/main.tf 文件中,我需要以下语法:

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

  source = "../modules/iam"

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

}

无需为../terraform/modules/iam/ecs_iam.tf 中声明的每个资源定义一个模块。这只是几个资源的分组(打包)。

【讨论】:

    【解决方案2】:

    在你的例子中:

    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 模块显示了如何将变量传递给模块。

    【讨论】:

      猜你喜欢
      • 2021-03-26
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 2021-07-22
      • 2017-11-20
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多