Terraform配置virtual_network dynamic块时报参数或块定义缺失错误
错误原因
你遇到的报错是最基础的HCL语法错误:virtual_network对应的dynamic块中的content子块没有添加闭合的大括号,导致Terraform解析代码时无法识别块边界,抛出「参数或块定义 required」的错误。
修复方案
- 补全
dynamic块的闭合括号
修正后的network_rule_set块代码如下:
network_rule_set { default_action = "Deny" dynamic "ip_rule" { for_each = [1] content { action = "Allow" ip_range = "xxx.xxx.xxx.xxx/32" } } dynamic "virtual_network" { for_each = var.vnet_subnet_ids content { action = "Allow" subnet_id = virtual_network.value } # 补全content块的闭合大括号 } # 补全dynamic块的闭合大括号 } # 补全network_rule_set块的闭合大括号
- 额外注意变量定义的潜在问题
你当前写的vnet_subnet_ids变量默认值中直接使用了${subscription_id}、${rg_name}插值引用,Terraform不支持在变量默认值中引用其他变量、资源或数据源,后续运行时这部分也会抛出错误。
如果需要动态生成子网ID列表,建议使用locals块完成拼接后再传入:
# 先定义依赖变量 variable "subscription_id" { type = string } variable "rg_name" { type = string } # 在locals中拼接默认子网ID locals { default_vnet_subnet_ids = [ "/subscriptions/${var.subscription_id}/resourceGroups/${var.rg_name}/providers/Microsoft.Network/virtualNetworks/nonprod-vnet-gp-kubernetes/subnets/pods_pub_subnet_01", "/subscriptions/${var.subscription_id}/resourceGroups/${var.rg_name}/providers/Microsoft.Network/virtualNetworks/nonprod-vnet-gp-kubernetes/subnets/pods_pub_subnet_02", ] }
使用时直接把local.default_vnet_subnet_ids作为dynamic块的for_each数据源即可。
内容的提问来源于stack exchange,提问作者FilBot3
相关产品推荐
相关产品推荐

