我使用的是0.12 Terraform,脚本是用0.11 Terraform编写的。
代码块为:
resource "azurerm_virtual_machine" "name_av_set" {
count = "${var.node_count}"
#count = "$length(var.node_count)"
name = "${var.resource_name_prefix}-pool-${var.name}-${format("%03d", count.index + 1)}-vm"
availability_set_id = "${azurerm_availability_set.name_av_set.id}"
尝试运行地形脚本时,出现错误
错误:
Error: Missing resource instance key
on main.tf, in resource "azurerm_virtual_machine"
58: availability_set_id = "${azurerm_availability_set.name_av_set.id}"
Because azurerm_availability_set.name_av_set has "count" set, its
attributes must be accessed on specific instances.
For example, to correlate with indices of a referring resource, use:
azurerm_availability_set.name_av_set[count.index]
如何更改以摆脱此错误?
如错误消息中的建议,您可以将[count.index]
部分添加到您的参考中,只要这两个资源都count = var.node_count
:
availability_set_id = azurerm_availability_set.name_av_set[count.index].id
如果按照记录的升级过程进行操作,则terraform 0.12upgrade
工具可以自动处理此类重写。在这种情况下,升级工具会选择不同的解决方案,因为它是更保守的选择:
availability_set_id = azurerm_availability_set.name_av_set[0].id
硬编码索引0
更适合表达式的 Terraform 0.11 行为,因为在 Terraform 0.11 中,azurerm_availability_set.name_av_set.id
表示采用azurerm_availability_set.name_av_set
的第一个实例的id
。
选择哪一个取决于是打算始终选择第一个可用性集,还是要将每个虚拟机与不同的可用性集相关联。
由于您使用计数定义了资源 azurerm_availability_set.name_av_set,因此现在将其视为对象列表。 所以你不能在azurerm_virtual_machine.name_av_set中设置azurerm_availability_set.name_av_set.id,它需要azurerm_availability_set.name_av_set.0.id或索引。