You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中动态挂载for_each创建的磁盘至VM时报错求助

Terraform:解决for_each创建的磁盘挂载至count创建VM的问题

问题场景

需要将通过for_each循环创建的磁盘,动态挂载到用count批量创建的Yandex Cloud虚拟机(VM)中,当前配置出现索引错误,尝试yandex_compute_disk.volume[each.key].id仍无法解决。

原配置与错误

磁盘创建配置

resource "yandex_compute_disk" "volume" {
  for_each = var.volumes
  name     = each.value["name"]
  size     = each.value["size"]
  type     = each.value["type"]
}

虚拟机创建配置

resource "yandex_compute_instance" "vps" {
  count       = var.server_count
  name        = var.server_count > 1 ? "${var.server_name}${count.index}" : var.server_name
  platform_id = var.platform_id
  zone        = var.zone
  # 省略其他实例配置...

  dynamic "secondary_disk" {
    for_each = var.volumes
    content {
      disk_id     = yandex_compute_disk.volume.id # 此处报错
      auto_delete = var.server_volume_auto_delete
    }
  }
}

错误提示

For example, to correlate with indices of a referring resource, use:
yandex_compute_disk.volume[each.key]

解决方案

错误核心是dynamic块的迭代上下文混淆,需用dynamic块自身的迭代变量索引磁盘资源:

修正后的虚拟机配置

resource "yandex_compute_instance" "vps" {
  count       = var.server_count
  name        = var.server_count > 1 ? "${var.server_name}${count.index}" : var.server_name
  platform_id = var.platform_id
  zone        = var.zone
  # 省略其他实例配置...

  dynamic "secondary_disk" {
    for_each = var.volumes
    content {
      disk_id     = yandex_compute_disk.volume[secondary_disk.key].id
      auto_delete = var.server_volume_auto_delete
    }
  }
}

关键说明

  • 在dynamic块内部,迭代变量是你给块定义的名称(这里是secondary_disk),而非全局的each。用secondary_disk.key可以获取到var.volumes的每个键值,对应磁盘资源yandex_compute_disk.volume的实例索引。
  • 确保var.volumes为映射类型(map),若为列表类型,for_each会自动转换为以字符串索引为键的映射,同样可用上述方法,但映射类型语义更清晰。示例变量定义:
variable "volumes" {
  type = map(object({
    name = string
    size = number
    type = string
  }))
  description = "待创建的磁盘配置集合"
}

内容的提问来源于stack exchange,提问作者zxcSora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:10:20