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 项目依赖项不起作用? (坚持尝试远程获取它)