在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有时可以满足客户需求。
此方法有一个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}"
此错误发生在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,而无需自己构建它或固定子网ID。
TIA。