Terraform-从快照启动Azure虚拟机
我正在尝试使用Terraform启动Azure VM(RM),使用以前拍摄的快照作为操作系统磁盘 这是我的Terraform-从快照启动Azure虚拟机,azure,azure-storage,azure-virtual-machine,terraform,terraform-provider-azure,Azure,Azure Storage,Azure Virtual Machine,Terraform,Terraform Provider Azure,我正在尝试使用Terraform启动Azure VM(RM),使用以前拍摄的快照作为操作系统磁盘 这是我的 data "azurerm_managed_disk" "windows-workstation_disk" { name = "workstation-disk" resource_group_name = "joeg" } ## Workstation machine resource "azurerm_virtual_machine" "windows-workstatio
data "azurerm_managed_disk" "windows-workstation_disk" {
name = "workstation-disk"
resource_group_name = "joeg"
}
## Workstation machine
resource "azurerm_virtual_machine" "windows-workstation" {
name = "windows-workstation"
location = "${var.location}"
resource_group_name = "${azurerm_resource_group.rg.name}"
vm_size = "Standard_D2s_v3"
network_interface_ids = ["${azurerm_network_interface.windows-workstation_nic.id}"]
storage_os_disk {
name = "windows-workstation_osdisk"
managed_disk_id = "${data.azurerm_managed_disk.windows-workstation_disk.id}"
create_option = "Attach"
}
运行terraformapply
Error applying plan:
1 error(s) occurred:
* azurerm_virtual_machine.windows-workstation: Resource
'data.azurerm_managed_disk.windows-workstation_disk' not found for variable
'data.azurerm_managed_disk.windows-workstation_disk.id'
有什么想法吗?Azure不支持从快照创建VM。相反,您应该使用此快照创建托管磁盘,然后使用此托管磁盘创建VM。看这个 我在实验室测试了它,下面的tf文件对我很有用:
resource“azurerm\u资源组”测试{
name=“shuicli”
地点=“美国东部”
}
资源“azurerm\u托管磁盘”“源”{
name=“测试”
地点=“美国东部”
资源组\u name=“shuicli”
存储\u账户\u类型=“标准\u LRS”
创建选项=“空”
磁盘大小\u gb=“30”
标签{
环境=“登台”
}
}
资源“azurerm\u受管磁盘”“复制”{
name=“shuicli”
地点=“美国东部”
资源组\u name=“shuicli”
存储\u账户\u类型=“标准\u LRS”
创建选项=“复制”
source_resource_id=“”
磁盘大小\u gb=“32”
标签{
环境=“登台”
}
}
##工作站
资源“azurerm\u虚拟机”“windows工作站”{
name=“windows工作站”
地点=“美国东部”
资源组\u name=“shuicli”
vm_size=“标准_D2s\u v3”
网络接口id=[“${azurerm\U网络接口.windows-workstation\u nic.id}”]
存储操作系统磁盘{
name=“测试”
os_type=“windows”
managed_disk_id=“${resource.azurerm_managed_disk.source.id}”
创建选项=“附加”
}
我一直在处理同一问题,并设法从快照创建VM。
首先在同一订阅中创建虚拟机的快照。然后在TF文件中忽略上面指定的源磁盘,只创建一个副本磁盘,其快照路径在“source\u resource\u id”下引用,并将其作为操作系统磁盘附加到新虚拟机上。下面是我使用的一个示例。还要确保在“storage\u os\u disk”是“azurerm\u managed\u disk.copy.id”而不是“resource.azurerm\u managed\u disk.copy.id”。希望这有帮助
resource "azurerm_managed_disk" "copy" {
name = "myOsDisk4"
location = "North Europe"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
storage_account_type = "Standard_LRS"
create_option = "Copy"
source_resource_id = "/subscriptions/*************/resourceGroups/My-prod-rg/providers/Microsoft.Compute/snapshots/test-01-c-drive"
disk_size_gb = "127"
tags {
environment = "Prod"
}
}
# Create virtual machine
resource "azurerm_virtual_machine" "myterraformvm" {
name = "Test-01"
location = "North Europe"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
network_interface_ids = ["${azurerm_network_interface.myterraformnic.id}"]
vm_size = "Standard_DS1_v2"
storage_os_disk {
name = "${azurerm_managed_disk.copy.name}"
os_type = "windows"
managed_disk_id = "${azurerm_managed_disk.copy.id}"
create_option = "Attach"
很长,但它们是否在同一个资源组中?例如,
${azurerm_resource_group.rg.name}
==“joeg”。我要检查的第二件事是“工作站磁盘”"当然存在,你能解决这个问题吗?你需要在存储磁盘中添加os类型。这是必需的。请替换你自己的变量,如磁盘大小。太棒了,我会试试看。嘿,恐怕不行。缺少变量错误。在你的示例中,我看不到来自另一个RG的快照是如何用来创建一个受管磁盘的,然后VM将使用它装载。您在VM资源中引用了源磁盘资源,如何导入使用源资源id的复制资源?@JoeGardiner我的示例是使用托管磁盘创建VM,资源id类似于/subscriptions/***********/resourceGroups/shuicli/providers/Microsoft.Compute/disks/shuicli
。我们无法使用快照来创建虚拟机直接创建VM。您需要使用它来创建托管磁盘,方法是copy
。我想了解一下您的示例。首先,您使用一个名为source
的托管磁盘资源,它没有对快照或VM映像的引用。然后,您有一个名为copy
的资源,它使用URI导入,对吗?最后,您有一个VM res但是它使用源
磁盘资源。如何使用复制
资源(我们导入快照的地方)