1

我正在尝试将一个输出值从一个 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}"
}

output.tf 用于从第一个模块中提取 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]
}

错误计数参数无效

计数 = var.iam_role == "" ?1 : 0

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

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

4

1 回答 1

1

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

另一个替代方案,同样如错误消息所述,是首先部署模块 1,然后部署模块 2。

于 2021-06-04T10:04:37.680 回答