Terraform concat函数报错及ADLS Gen2文件系统部署问题求助
问题解答
能不能用concat函数?
不能。Terraform的concat函数是用来合并多个列表或元组的,并非用于字符串拼接。你传入的所有参数都是字符串类型,不符合函数的参数要求,因此触发了Invalid function argument错误。
解决报错的两种方法
方法1:使用字符串插值(推荐)
Terraform支持直接在字符串中用${}嵌入变量或表达式,这是最直观的字符串拼接方式:
resource "azurerm_storage_data_lake_gen2_filesystem" "storagedlsgen2fs" { for_each = { for p in local.staname : jsonencode(p) => p } name = var.adlsfilesystems storage_account_id = "/subscriptions/${data.azurerm_subscription.current.id}/resourceGroups/resourcegroup/providers/Microsoft.Storage/storageAccounts/${each.value.staname}" }
方法2:使用join函数
如果要通过函数实现拼接,可以把所有待拼接的字符串放入列表,用join函数以空字符串连接:
resource "azurerm_storage_data_lake_gen2_filesystem" "storagedlsgen2fs" { for_each = { for p in local.staname : jsonencode(p) => p } name = var.adlsfilesystems storage_account_id = join("", [ "/subscriptions/", data.azurerm_subscription.current.id, "/resourceGroups/resourcegroup/providers/Microsoft.Storage/storageAccounts/", each.value.staname ]) }
额外提示:关于「resource not found」错误
你提到直接用ID时出现资源找不到的问题,大概率是存储账户资源尚未完成创建(比如云资源异步部署存在延迟),或者手动填写的ID存在拼写错误。如果使用上述动态生成ID的方式,建议确保存储账户资源已被正确定义,若跨模块引用可能需要显式声明depends_on来强制依赖顺序。
内容的提问来源于stack exchange,提问作者csuser
相关产品推荐
相关产品推荐

