terraform - 如何引用导入的 terraform 资源
问题描述
我需要你的帮助。我们创建了一个资源组 ( 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 创建所有内容而不使用任何导入的资源,如下所示:
变量.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"
构建-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"
}
我的问题是如何引用导入的资源,我更喜欢它们是参数化的,但如果不可能,那么硬编码值将是前进的方式吗?我需要在同一个资源组中创建我的虚拟机吗?
我可以看到它们在状态文件中导入,请指导,因为我对 Azure 和 Terraform 非常陌生。
非常感谢!
解决方案
你可以按如下方式导入和使用资源,听起来你这个导入好了
导入您的资源,使用提供者/资源名称,例如“azurerm_virtual_network.web_server_vnet”。然后在 terraform 中使用相同的名称和它当前在 Azure 中使用的设置重新定义它。然后,您可以像使用您创建的资源一样使用它。也许您可以将其定义为数据资源?您不需要添加所有属性,如果您进行 terraform destroy ,它也不会被破坏。
进口
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
在 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"
}
推荐阅读
- jquery - 加载特定元素时如何运行脚本?
- python - NoSuchElementException:没有这样的元素:无法找到元素:css 选择器,但我正在使用 find_element
- c# - 使用 EnumeratorCancellation 返回 AsyncEnumerable 或循环使用 WithCancellation 有什么区别
- sql-server - 在查询中主要插入时查询完成并出现错误
- python - GLTF 中的平移和缩放
- laravel - 在从 docker-compose.yml 完成 docker build 后触发在容器内执行自定义 shell 脚本以运行迁移和 db:seed
- php - 按标签或类别搜索产品不起作用
- c# - 在 C# 中清除静态列表
- r - 错误:替换有 x 行,数据有 y
- qt - QML 我如何将默认选项设置为组合框的空值?