Terraform创建ExpressRoute虚拟网关连接报ID缺失元素错误
问题根因
该问题为配置参数误用,不属于Azure平台或Terraform Azurerm提供商的Bug:
azurerm_virtual_network_gateway_connection资源的peer_virtual_network_gateway_id参数仅适用于type = "Vnet2Vnet"的跨虚拟网络网关连接场景,要求传入值必须是对端虚拟网络网关的资源ID,ID路径固定包含virtualNetworkGateways字段。- 当前配置为ExpressRoute类型连接,错误将ExpressRoute线路的资源ID传入了上述虚拟网关专用参数。Terraform在apply阶段会校验传入ID的路径结构,找不到要求的
virtualNetworkGateways片段时直接抛出对应错误。 terraform plan阶段仅校验参数值的基础类型(如字符串、数字),不会校验ID对应的资源类型与路径合法性,因此不会提前报错;Azure Portal操作时会根据选择的连接类型自动隐藏不匹配的配置项、绑定正确的参数逻辑,因此可以正常完成部署。
修复方案
调整资源配置参数即可:
- 删除配置中错误的
peer_virtual_network_gateway_id参数行 - 新增ExpressRoute连接专用的
express_route_circuit_id参数,传入ExpressRoute线路的资源ID
修正后的核心代码片段:
resource "azurerm_virtual_network_gateway_connection" "express_route_circuit_connection" { name = "az-prd-euw-expressrouteconn-001" location = azurerm_resource_group.resource_group.location resource_group_name = azurerm_resource_group.resource_group.name type = "ExpressRoute" virtual_network_gateway_id = azurerm_virtual_network_gateway.disaster_recovery_virtual_network_gateway.id express_route_circuit_id = data.azurerm_express_route_circuit.express_route_circuit.id authorization_key = azurerm_express_route_circuit_authorization.marel-disasterrecovery.authorization_key routing_weight = 1 }
调整完成后重新执行terraform plan确认参数映射无误,再执行apply即可正常完成部署。
内容的提问来源于stack exchange,提问作者cz75ww
相关产品推荐
相关产品推荐

