Terraform 模块依赖项不起作用(版本 0.12)

时间:2021-06-04 09:30:09

标签: amazon-web-services terraform amazon-iam terraform-provider-aws hashicorp

我试图将一个输出值从一个 terraform 模块传递到另一个 terraform 模块,但面临以下问题

我的用例是这样的,在第一个模块中我创建了一个 IAM 角色,在第二个模块中我需要使用上面创建的 IAM 角色(同样,在第二个模块中,如果角色没有在第一个模块中创建,它将创建角色本身在第二个模块中,请将其视为要求)

module "createiamrole"{
  source = "./modules/createiamrole"
}


// this module creates new role, if role is not supplied from above module (default value of iam_role is "" set in variables.tf).
module "checkiamrole"{
  source = "./modules/checkiamrole"
  iam_role_depends_on = module.createiamrole.iam_role_name
  iam_role    = "${module.createiamrole.iam_role_name}"
}

outputs.tf 用于从第一个模块 stroing iam_role_name

output "iam_role_name" {
  description = "name for IAM role"
  value       = aws_iam_role.createiamrole[0].name
}

我收到错误的模块 checkiamrole 的资源代码

resource "aws_iam_role" "newrole" {
  count              = var.iam_role == "" ? 1 : 0
  name               = "my-new-iamrole"
  assume_role_policy = data.aws_iam_policy_document.iampolicy[0].json

  tags = var.tags

  depends_on = [var.iam_role_depends_on]
}

错误 计数参数无效

count = var.iam_role == "" ? 1:0

“计数”值取决于无法确定的资源属性 直到应用,因​​此 Terraform 无法预测将创建多少个实例。 要解决此问题,请使用 -target 参数首先仅应用 计数所依赖的资源。

我的查询是如何实现模块依赖以及如何将一个输出值从依赖模块传递到所需模块

1 个答案:

答案 0 :(得分:1)

您的 count,正如错误消息所述,不能依赖任何其他资源。在运行代码之前,必须知道 count 的条件。所以你必须创建一些新变量,例如您在 var.create_role 期间指定的 apply。根据此值,模块将创建或不创建相关角色。

正如错误消息所说,另一种选择是先部署 module1,然后再部署 module2。