使用for_each导入Azure存储容器时遇「导入目标配置不存在」错误
问题分析与解决方案
错误根源
你遇到的Configuration for import target does not exist错误,核心原因是导入块中指定的目标资源地址不正确。
你的storage_container模块是通过for_each在模块调用层实例化的——每个存储容器对应一个独立的模块实例,而非模块内部的资源使用for_each。但你当前的导入块中,错误地将资源地址写成了module.storage_container.azurerm_storage_container.storage_container[each.key],这是把模块内部资源的索引逻辑套在了模块层面,导致Terraform找不到对应的配置实例。
修正方案
步骤1:修正导入块的资源地址
将import块中的to字段修改为正确的模块实例化路径:
import { for_each = toset(var.storage_containers) // 修正后的资源地址:模块实例带索引,内部资源无索引 to = module.storage_container[each.key].azurerm_storage_container.storage_container id = "https://${module.storage_account.name}.blob.core.windows.net/${each.key}" } module "storage_container" { source = "../../../modules/storage/storage_container" for_each = toset(var.storage_containers) storage_container = { name = each.key access_type = "Private" } storage_account_name = module.storage_account.name }
步骤2:验证模块内部配置
确保你的storage_container模块内部的资源定义没有额外使用for_each,且资源名称与导入块中的一致。比如模块内的main.tf应该类似:
resource "azurerm_storage_container" "storage_container" { name = var.storage_container.name storage_account_name = var.storage_account_name container_access_type = var.storage_container.access_type } variable "storage_container" { type = object({ name = string access_type = string }) } variable "storage_account_name" { type = string }
步骤3:验证执行
修改完成后,重新运行terraform plan,错误应该会消失。如果仍有问题,检查以下几点:
- 变量
storage_containers中的容器名称与Azure中实际存在的容器完全一致(大小写敏感) - 模块内部的资源标识符(即
azurerm_storage_container后的storage_container)与导入块中的完全匹配
内容的提问来源于stack exchange,提问作者bramvdk
相关产品推荐
相关产品推荐

