使用Terraform将NIC连接到Azure中正在运行的VM
我已经编写了一个terraform脚本来在Azure中部署VM。我想在不同的时间将多个NIC连接/分离到该VM。 由于VM在部署后开始运行,因此当我尝试将另一个NIC Id添加到使用Terraform将NIC连接到Azure中正在运行的VM,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我已经编写了一个terraform脚本来在Azure中部署VM。我想在不同的时间将多个NIC连接/分离到该VM。 由于VM在部署后开始运行,因此当我尝试将另一个NIC Id添加到network\u interface\u idsinsideazurerm\u virtual\u machine资源块时,会出现错误。 我认为Terraform还不能改变Azure中VM的状态。 我在terraform中看不到任何VM-NIC关联资源,如何实现这一点 我是云和地形的初学者,所以这可能是一个基本问题,但
network\u interface\u ids
insideazurerm\u virtual\u machine
资源块时,会出现错误。
我认为Terraform还不能改变Azure中VM的状态。
我在terraform中看不到任何VM-NIC关联资源,如何实现这一点
我是云和地形的初学者,所以这可能是一个基本问题,但我在任何地方都找不到解决方案。感谢您的帮助
我当前的代码如下所示:
resource "azurerm_network_interface" "nic1" {
name = "nic1"
resource_group_name = data.azurerm_resource_group.rg.name
location = data.azurerm_resource_group.rg.location
enable_accelerated_networking = true
ip_configuration {
name = "nic1-config1"
# public_ip_address_id = azurerm_public_ip.public_ip.id
private_ip_address_allocation = "dynamic"
subnet_id = data.azurerm_subnet.subnet.id
primary = true
}
ip_configuration {
name = "nic1-config2"
public_ip_address_id = azurerm_public_ip.public_ip.id
private_ip_address_allocation = "dynamic"
subnet_id = data.azurerm_subnet.subnet.id
}
tags = var.TAGS
}
resource "azurerm_network_interface" "nic2" {
name = "nic2"
resource_group_name = data.azurerm_resource_group.rg.name
location = data.azurerm_resource_group.rg.location
enable_accelerated_networking = true
ip_configuration {
name = "nic2-config1"
# public_ip_address_id = azurerm_public_ip.public_ip.id
private_ip_address_allocation = "dynamic"
subnet_id = data.azurerm_subnet.subnet.id
primary = true
}
ip_configuration {
name = "nic2-config2"
# public_ip_address_id = azurerm_public_ip.public_ip.id
private_ip_address_allocation = "dynamic"
subnet_id = data.azurerm_subnet.subnet.id
}
tags = var.TAGS
}
resource "azurerm_virtual_machine" "vm" {
name = "vm"
resource_group_name = data.azurerm_resource_group.rg.name
location = data.azurerm_resource_group.rg.location
network_interface_ids = [azurerm_network_interface.nic1.id]
vm_size = "Standard_D4S_v3"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_os_disk {
name = "os-disk"
create_option = "FromImage"
caching = "ReadWrite"
managed_disk_type = "Premium_LRS"
disk_size_gb = 32
}
primary_network_interface_id = azurerm_network_interface.nic.id
storage_image_reference {
id = lookup(var.VMI,data.azurerm_resource_group.rg.location)
}
os_profile {
admin_username = "test"
computer_name = "test"
admin_password = "test"
}
os_profile_linux_config {
disable_password_authentication = true
ssh_keys {
path = "/home/user/.ssh/authorized_keys"
key_data = "..."
}
}
tags = var.TAGS
}
我成功地部署了上述基础设施
现在我想将nic2附加到此虚拟机,因此我做了以下更改
resource "azurerm_virtual_machine" "vm" {
....
network_interface_ids = [azurerm_network_interface.nic1.id, azurerm_network_interface.nic2.id]
...
}
表示我最多可以将两个NIC连接到标准_D4s_v3
我得到这个错误,它清楚地表明关闭虚拟机,然后尝试连接
错误:compute.VirtualMachinesClient#CreateOrUpdate Code=“AddingOrderetingNetworkInterfaceSonar运行virtualmachineNotSupported”
Message=“只有一个网络接口的虚拟机vm必须停止释放,然后才能更新为具有多个网络接口,反之亦然。”
我想知道是否有一种方法可以将NIC热连接到azure中的VM
我正在看这个当您将另一个NIC连接到现有VM时,VM必须处于停止(解除分配)状态。它是专门设计的。Terraform没有单独的资源用于VM和NIC之间的关联 因此,据我所知,您需要首先停止VM,然后在进行更改时将第二个nic id添加到VM:
resource "azurerm_virtual_machine" "vm" {
....
network_interface_ids = [azurerm_network_interface.nic1.id, azurerm_network_interface.nic2.id]
...
}
当VM处于停止状态时,应用地形代码。要通过Terraform停止VM,可以使用以下命令执行CLI命令:
首先,您可以发布代码和错误消息。第二,如果您试图删除nic,则需要将其关闭。最后,根据机器的大小,可以连接的NIC数量有限。
resource "null_resource" "example2" {
provisioner "local-exec" {
command = "az vm stop --resource-group groupName --name vmName"
interpreter = ["/bin/bash", "-c"]
}
}