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

Posted

技术标签:

【中文标题】Terraform 模块依赖项不起作用(版本 0.12)【英文标题】:Terraform Module dependency not working ( version 0.12) 【发布时间】:2021-08-22 08:50:24 【问题描述】:

我正在尝试将一个输出值从一个 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 用于从第一个模块中提取 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】:

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

正如错误消息所说,另一种选择是先部署模块 1,然后部署模块 2。

【讨论】:

对于您的第一个建议,我已经为每个模块使用了单独的标志,问题是这样的,即使我尝试为第二个模块设置标志 false,它仍然失败,同样根据您的最后一条语句,不能我们实现模块依赖并同时将一些值传递给其他模块?

以上是关于Terraform 模块依赖项不起作用(版本 0.12)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 sbt 项目依赖项不起作用? (坚持尝试远程获取它)

使用作曲家安装 laravel 依赖项不起作用

在 JS 中工作时,在 Typescript 项目中添加本地依赖项不起作用

传递给子模块的 terraform 提供程序不起作用

为啥 Spinner 中的第一项不起作用

Laravel 没有安装依赖项不正确的 php 版本