首页 > 解决方案 > Terraform 模块输出无法解析其他模块中的输入变量

问题描述

地形版本

Terraform v0.11.11
+ provider.azurerm v1.21.0

Terraform 配置文件

为了简洁起见,我留下了许多必填字段(在我添加连接字符串之前,所有其他配置都有效)。

# modules/function/main.tf

variable "conn-value" {}
locals {
  conn = "${map("name", "mydb", "value", "${var.conn-value}", "type", "SQLAzure")}"
}
resource "azurerm_function_app" "functions" {
  connection_string = "${list(local.conn)}"
  # ...
}

# modules/db/main.tf

# ... other variables declared

resource "azurerm_sql_server" "server" {
  # ...
}

output "connection-string" {
  value = "Server=tcp:${azurerm_sql_server.server.fully_qualified_domain_name},1433;Initial Catalog=${var.catalog};Persist Security Info=False;User ID=${var.login};Password=${var.login-password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=200;"
}

# main.tf

module "my_db" {
  source = "modules/db"
}

module "my_app" {
  source = "modules/function"
  conn-value = "${module.my_db.connection-string}"
  # ...
}

预期行为terraform plan

输出在传递给变量module.my_db.connection-string时解析为字符串,my_app conn-value并且能够在传递给变量的映射/列表中使用azurerm_function_app.functions.connection_string

实际行为terraform plan

我收到此错误:

module.my_app.azurerm_function_app.functions: connection_string: should be a list

如果我只用一个字符串替换"${var.conn-value}"modules/function/main.tf locals,它就可以工作。

更新

针对此评论,我使用连接字符串构造更新了上面的脚本。

标签: azureterraform

解决方案


我终于找到了引用我遇到的问题的GitHub 问题(我通过这个要点评论找到了问题)。这准确地描述了这个问题:

不支持为嵌套块分配值,但由于一些巧合,在某些情况下似乎可以工作......

此限制在 <= v0.11 中,但显然在 v0.12 中与块一起修复。dynamic


推荐阅读