3

在 Azure 中,我正在尝试使用 Terraform 创建一个 Windows VM。我之前使用 Template.json 文件通过 Powershell 完成了此操作。现在我必须处理 terraform,我对它完全陌生。所以我搜索了一些在 Azure 中创建 VM 的示例脚本并找到了这个

在此链接中,有一个用于旋转 Linux VM 的示例 Terraform 脚本。但我需要从图像中旋转 Windows VM。我应该在哪里提供图像详细信息。我的完整要求是:

  1. 从映像创建 Windows VM(具有资源 ID)
  2. 我已经创建了资源组、虚拟网络、子网。我只需要传递这些值并创建它们。
  3. 我们已经从门户本身定义了子网地址前缀、Vnet 地址空间。所以我必须在脚本中再次给出还是可以跳过它。
  4. 业务要求是任何虚拟机都不应该有公共 IP 和 DNS 名称,所以如果我删除“# Create public IPs”部分,那不会创建公共 IP 吗?

创建Linux机器的脚本在这里,我将其作为参考。

4

2 回答 2

2

下面是一个如何使用数据来使用 terraform 中现有资源的示例,还有一个创建 windows VM 的代码块。您将需要获取现有的 VNET 并创建一个 NIC

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

azurerm_network_interface使用 VNET ID创建资源

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

用于创建和负载平衡 VM 的示例 TF 代码

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 {
  }

}
于 2018-09-25T13:18:52.633 回答
-1

从 Terraform 的角度来看,Windows VM 与 Linux VM 非常相似。在我看来,第一个区别是 Windows VM 需要一个os_profile_windows_config属性,而 Linux VM 需要os_profile_linux_config.

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

我强烈建议通读VM 资源中的所有选项。我知道这很多,但你应该明白你有什么选择。

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

于 2018-09-20T12:54:10.050 回答