如何使用另一个资源组中的现有资源来使用Terraform在新资源组中进行部署

时间:2020-05-29 07:39:12

标签: terraform terraform-provider-azure terraform0.12+

我想在新资源组中创建资源,但是我想对另一个资源组中的那些资源使用虚拟网络。我该怎么做呢?例如,我想在resourcegroupA中创建redis / postgresql,但我想利用resourcegroupB中的虚拟网络。有可能吗?

这是我从中检索vnet的资源组-

    resource "azurerm_resource_group" "azresourcegroup" {
      name        = 
      "resourcegroupA"
      location    = var.resource_group_location
    }

    #-----CREATING VIRTUAL NETWORK-----

    resource "azurerm_virtual_network" "vnet2" {
       name                = "virtualnetworkA"
       location            = azurerm_resource_group.azresourcegroup.location
       resource_group_name = azurerm_resource_group.azresourcegroup.name
       address_space       = [var.virtual_network_address_prefix_infra,var.virtual_network_address_prefix]

我在将它用于另一个这样的资源组时检索了它-

    data "azurerm_resource_group" "azresourcegroup" {
      name        = "resoucegroupA"
    }

    data "azurerm_virtual_network" "vnet2" {
     name                = "virtualnetworkA"
      resource_group_name = data.azurerm_resource_group.azresourcegroup.name
    }

我想使用上述虚拟网络,但想在新资源组中创建其他资源,即-

     resource "azurerm_resource_group" "main" {
      name        = "resourcegroupB"
      location    = var.resource_group_location
    }

我正在使用模块来创建Redis缓存,该缓存需要在其他RG-中创建的vnet-

    module "rediscache" {
      source                             = "../../modules/rediscache"
      prefix                             = var.prefix
      environmentType                    = var.environmentType
      virtual_network_name               = var.virtual_network_name
      unique_identifier                  = var.unique_identifier_kube
      resource_group_name                = azurerm_resource_group.main.name
      resource_group_location            = var.resource_group_location
      redis_subnet_address_prefix        = var.redis_subnet_address_prefix
      azurerm_virtual_network_name       = data.azurerm_virtual_network.vnet2.name
      azurerm_log_analytics_workspace_id = azurerm_log_analytics_workspace.workspace.id
    }

为简化此操作,在其他资源组中创建了vnet,在另一个资源组中进行了redis。但是我想使用该vnet。另外,如果我将模块中使用的resource group name参数从azurerm_resource_group.main.name更改为data.azurerm_resource_group.azresourcegroup.name,那么它将在我不需要的第一个资源组中创建Redis。 请帮忙。

1 个答案:

答案 0 :(得分:0)

当然可以。唯一的条件是虚拟网络应位于同一位置。然后,您可以像这样通过Terraform Data Source azurerm_virtual_network在Terraform代码中引用它:

data "azurerm_virtual_network" "example" {
  name                = "production"
  resource_group_name = "networking"
}