在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"
我想知道是否有一个问题的情况下,作为RG和VNet出来的大写。我知道Azure有时会区分大小写。
方法2
有一个
bug #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}"
这个错误在
初始化
在这个阶段,前面提到的bug很明显。我试着通过设置
version = "1.17.0"
在
provider{}
声明,但它被忽略了,我最终
1.16.0
.
方法3
我也尝试过方法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下载而不必自己构建或修复子网id。
蒂亚。