1

在 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。

4

0 回答 0