Terraform-从快照启动Azure虚拟机

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

我正在尝试使用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-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但是它使用
磁盘资源。如何使用
复制
资源(我们导入快照的地方)