首页 文章

如何引用导入的terraform资源

提问于
浏览
0

我需要你的帮助 . 我们已经创建了一个资源组( rg_networking )和虚拟网络( vnet_preprod )以及5个子网( subnet_ad ),subnet_app,subnet_ctl等 .

我的资源导入工作完全正常,但是,我不知道是使用/引用导入的资源?

terraform import --var-file=aos-1.tfvars azurerm_virtual_network.vnet_preprod /subscriptions/00000000000000000/resourceGroups/rg_networking/providers/Microsoft.Network/virtualNetworks/vnet_preprod
azurerm_virtual_network.vnet_preprod: Importing from ID "/subscriptions/00000000000000000/resourceGroups/rg_networking/providers/Microsoft.Network/virtualNetworks/vnet_preprod"...
azurerm_virtual_network.vnet_preprod: Import complete!
  Imported azurerm_virtual_network (ID: /subscriptions/00000000000000000/resourceGroups/rg_networking/providers/Microsoft.Network/virtualNetworks/vnet_preprod)
azurerm_virtual_network.vnet_preprod: Refreshing state... (ID: /subscriptions/00000000000000000-...rk/virtualNetworks/vnet_preprod)

Import successful!

导入的资源如上所示 . 这些资源现在处于Terraform状态,此后将由Terraform管理 .

在我的 windows-build-tf 文件中

resource "azurerm_virtual_network" "vnet_preprod" {
  name                = ""
  address_space       = ""
  location            = ""
  resource_group_name = ""
}

我不得不插入上面的代码片段,否则导入将无效 .

我以前的工作配置,Terraform创建所有内容而不使用任何导入的资源如下:

variables.tfvars

address_space = [ "10.97.0.0/16" ]
virtual_network_subnet_ad = "10.97.1.0/24"
virtual_network_subnet_ad_name="groups-preprod_subnet_ad"
virtual_network_nic_ad="groups-preprod_nic_ad"

build-windows.tf

resource "azurerm_virtual_network" "tf-virtual-network" {
  name                = "${var.virtual_network_name}"
  address_space       = "${var.address_space}"
  location            = "${var.Location}"
  resource_group_name = "${var.Resource_group_name}"
}

resource "azurerm_subnet" "tf-virtual-network-subnet-ad" {
  name                 = "${var.virtual_network_subnet_ad_name}"
  resource_group_name  = "${var.Resource_group_name}"
  virtual_network_name = "${azurerm_virtual_network.tf-virtual-network.name}"
  address_prefix       = "${var.virtual_network_subnet_ad}"
}

resource "azurerm_network_interface" "tf-virtual-network-nic-ad" {
  name                = "${var.virtual_network_nic_ad}"
  location            = "${var.Location}"
  resource_group_name = "${var.Resource_group_name}"

  ip_configuration {
    name                          = "testconfiguration1"
    subnet_id                     = "${azurerm_subnet.tf-virtual-network-subnet-ad.id}"
    private_ip_address_allocation = "dynamic"
  }
}
resource "azurerm_virtual_machine" "tf-virtual-machine-name" {
  name                  = "${var.virtual_machine_name}"
  location              = "${var.Location}"
  resource_group_name   = "${var.Resource_group_name}"
  network_interface_ids = ["${azurerm_network_interface.tf-virtual-network-nic-ad.id}"]
  vm_size               = "Standard_DS3_v2"
}

我的问题是如何引用导入的资源,我更喜欢它们是参数化的,但如果它不可能那么硬编码值将是前进的方式?我是否需要在同一资源组中创建我的VM?

我可以看到它们在状态文件中导入,请指导,因为我对Azure和Terraform非常新 .

非常感谢!

1 回答

  • 0

    您可以按如下方式导入和使用资源,听起来就像您导入的那样好了

    导入资源,使用提供者/资源名称,例如'azurerm_virtual_network.web_server_vnet' . 然后在terraform中使用与Azure当前使用的相同名称和设置重新定义它 . 然后,您可以像创建的资源一样使用它 . 您可以将其定义为数据资源吗?您不需要添加所有属性,如果您执行terraform destroy,它将不会被销毁 .

    Import

    https://resources.azure.com/ - 方便获取资源ID

    terraform import azurerm_virtual_network.web_server_vnet /subscriptions/xxxxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxx/resourceGroups/tf-web-rg/providers/Microsoft.Network/virtualNetworks/web-server-vnet
    

    In Terraform

    resource "azurerm_virtual_network" "web_server_vnet" {
      name                = "vnet"
      location            = "location"
      resource_group_name = "resourceGroup"
      address_space       = ["1.1.1.0/24"]
    }
    
    data "azurerm_resource_group" "web_server_rg" {
      name = "existing RG Name"
    }
    

相关问题