通过Terraform创建Azure Windows VM

时间:2018-09-20 07:05:35

标签: azure terraform azure-virtual-machine terraform-provider-azure

在Azure中,我正在尝试使用terraform创建Windows VM。
我之前通过Powershell通过Template.json文件完成了此操作。现在我要接触terraform,这是我的新手。
因此,我搜索了一些在Azure中创建VM的示例脚本,并发现了this

在此链接中,有一个示例terraform脚本可以旋转Linux VM。但是我需要从Image旋转Windows VM。我应该在哪里提供图片详细信息。
我的完整要求是:
1.从映像(具有资源ID)创建Windows VM
2.我已经创建了资源组,虚拟网络,子网。我只需要传递这些值并创建它们即可。
3.我们已经从门户itslef定义了子网地址前缀Vnet地址空间。所以我必须再次在脚本中给出还是可以跳过它。
4.业务需求是任何VM都不应具有公共IP和DNS名称,因此,如果我删除“#Create public IPs”部分,是否将不创建公共IP?

用于创建Linux机器的脚本为here,我将其作为参考。

如果我提出的问题完全la脚,请原谅我,但我需要知道这些细节。
谁能帮我/指导我正确的方法!

2 个答案:

答案 0 :(得分:2)

下面是一个如何使用数据来以Terraform形式使用现有资源的示例,还提供了一个代码块来创建Windows VM。您将需要获取现有的VNET并创建一个NIC

使用data指令获取VNET azurerm_virtual_network,您可以在下面看到资源组的语法。您需要将资源组以及可能的位置添加到此块中。

使用VNET ID创建azurerm_network_interface资源

将网络接口ID添加到VM(network_interface_ids = [])

Example TF Code to Create and load balance VMs

variable "subscription_id" {}
variable "client_id" {}
variable "client_secret" {}
variable "tenant_id" {}

provider "azurerm" {
  tenant_id       = "${var.tenant_id}"
  subscription_id = "${var.subscription_id}"
  client_id       = "${var.client_id}"
  client_secret   = "${var.client_secret}"
}

data "azurerm_resource_group" "resource_group" {
  name                = "learning-tf-web-rg"
}


resource "azurerm_virtual_machine" "web_server" {
  name                  = "server"
  location              = "westus2"
  resource_group_name   = "${data.azurerm_resource_group.resource_group.name}"
  network_interface_ids = []
  vm_size               = "Standard_B2s"

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2016-Datacenter-Server-Core-smalldisk"
    version   = "latest"
  }

  storage_os_disk {
    name              = "server-os"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Standard_LRS"
  }

  os_profile {
    computer_name      = "server"
    admin_username     = "server"
    admin_password     = "Passw0rd1234"

  }

  os_profile_windows_config {
  }

}

答案 1 :(得分:1)

从Terraform的角度来看,Windows VM实际上与Linux VM非常相似。我认为#1的区别是Windows VM需要os_profile_windows_config属性,而Linux VM需要os_profile_linux_config

在Microsoft网站上找到的TF代码是一个好的开始。此外,您可以查看Terraform Registry。例如,这是一个module for a Linux VM

我强烈建议您仔细阅读VM resource中的所有选项。我知道很多,但是您应该了解自己的选择。

最后,没有什么可以替代编写一些代码并对其进行测试。如果您做错了什么,Terraform和/或Azure API会告诉您,如果不清楚,则网络搜索将弹出正确的答案或指针。

祝你好运!