在 Azure 中,我使用 Terraform 将基础架构部署到资源组 02 (rg02)。我在资源组 01 (rg01) 中有一个 VNet (nvn01) 和子网 (subnet-000),需要在main.tf
.
我尝试了三种方法:
方法一
提供子网 ID 作为变量。子网 ID 已从Resource Explorer复制并粘贴。init
不会产生任何错误,但是会plan
产生:
1 error(s) occurred:
* module.app_gateway.azurerm_application_gateway.network: 1 error(s) occurred:
* azurerm_application_gateway.network: Error Creating/Updating ApplicationGateway "appgw01" (Resource Group "rg02"): network.ApplicationGatewaysClient#CreateOrUpdate: Failure sending request: StatusCode=0 -- Original Error: autorest/azure: Service returned an error. Status=404 Code="NotFound" Message="Resource /subscriptions/mySubscriptionGuid/resourceGroups/RG01/providers/Microsoft.Network/virtualNetworks/NVN01 not found." Details=[]
.tfvars 包含以下行:
subnet_id = "/subscriptions/mySubscriptionGuid/resourceGroups/rg01/providers/Microsoft.Network/virtualNetworks/nvn01/subnets/subnet-000"
我想知道 CaSe 是否存在问题,因为 RG 和 VNet 以大写形式出现。我知道 Azure 有时会引起人们的注意。
方法二
此方法存在错误 #2016,已在未发布的版本 1.17.0 中修复。使用data{}
,我因此引用子网:
data "azurerm_subnet" "shared" {
name = "$(var.shared_virtual_network_subnet_name)"
virtual_network_name = "$(var.shared_virtual_network_name)"
resource_group_name = "$(var.shared_resource_group_name)"
}
在我的资源中,称之为subnet_id = "${data.azurerm_subnet.shared.id}"
init
在上述错误很明显的阶段出现此错误。我试图通过version = "1.17.0"
在provider{}
声明中设置来告诉 TF 使用 1.17.0,但它被忽略了,我最终得到1.16.0
.
方法三
我也尝试过方法 2,但没有使用azurerm_subnet
; 选择azurerm_virtual_network
并使用以下方法调用它:
subnet_id = "${data.azurerm_virtual_network.shared.id}/subnets/${var.shared_virtual_network_subnet_name}"
但是错误与方法 2 相同,我注意到资源组位于错误的位置。我希望 1.17.0 修复了这两个错误。
在ARM模板中,我记得ResourceId('subnetId')
在这种情况下必须使用一个,所以我想知道TF中是否有类似的功能。也许我必须为子网 ID 路径添加前缀?
无论如何,由于 Azure 提供程序的例子很少,至少可以说,如果有人有任何指示,如果你能分享,我将不胜感激,在无需自己构建或修复的情况下下载 1.17.0子网标识。
TIA。