引用其他资源组中的资源

时间:2018-10-10 17:20:16

标签: terraform-provider-azure

在Azure中,我正在使用Terraform将基础结构部署到资源组02(rg02)。我在资源组01(rg01)中有一个VNet(nvn01)和子网(subnet-000),并且需要在main.tf中的资源中引用它。

我尝试了三种方法:

方法1

提供子网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有时可以满足客户需求。


方法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}"

此错误发生在init阶段,上述错误很明显。我试图通过在version = "1.17.0"声明中设置provider{}来告诉TF使用1.17.0,但是它被忽略了,最终得到了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。

TIA。

0 个答案:

没有答案