通过Terraform创建Azure Windows虚拟机

3
在Azure中,我正在尝试使用Terraform创建Windows VM。之前我曾使用Template.json文件通过Powershell完成过这个任务。现在我要用Terraform完成,而且我完全不熟悉Terraform。所以我搜索了一些示例脚本,发现了这个
在这个链接中,有一个样例的Terraform脚本可以创建一个Linux VM。但是我需要根据镜像创建一个Windows VM。在哪里应该提供镜像的详细信息?我的完整需求如下:
  1. 根据一个镜像(已经有资源ID)创建一个Windows VM。
  2. 我已经创建了资源组、虚拟网络和子网。我只需要传递这些值并创建它们。
  3. 我们已经在门户中定义了子网地址前缀和Vnet地址空间。那么我是否需要在脚本中重新指定,还是可以跳过这一步?
  4. 业务需求是所有的VM都不能有公共IP和DNS名称。如果我删除“# 创建公共IP”部分,那么是否就不会创建公共IP了?
创建Linux机器的脚本可以在这里找到,我会将其作为参考。

2
您可以查看以下文章来创建 Windows 虚拟机:https://github.com/Azure/terraform-azurerm-vm 和 https://learn.microsoft.com/en-us/azure/terraform/terraform-create-vm-cluster-module。 - CHEEKATLAPRADEEP
2个回答

3
以下是如何使用数据来使用terraform中已有的资源的示例,还有一个创建Windows VM的代码块。您需要获取现有的VNET并创建一个NIC。
使用data指令获取VNET azurerm_virtual_network,可以看到下面的语法用于资源组。您需要将资源组和可能的位置添加到此块中。
使用VNET ID创建azurerm_network_interface资源。
将网络接口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 {
  }

}

-1

从 Terraform 的角度来看,Windows VM 与 Linux VM 非常相似。在我看来,它们之间的 #1 差异是 Windows VM 需要一个 os_profile_windows_config 属性,而 Linux VM 则需要 os_profile_linux_config

你在 Microsoft 网站上找到的 TF 代码已经很好了。此外,你还可以查看 Terraform Registry。例如,这里有一个 Linux VM 模块

我强烈建议你阅读 VM 资源 中的所有选项。我知道这很多,但你应该了解自己有哪些选择。

最后,没有什么比编写一些代码并进行测试更好的替代方法了。如果你做错了什么,Terraform 和/或 Azure API 将会告诉你,如果不清楚,网络搜索将会给出答案或指引正确的方向。


1
这真的是一个糟糕的答案,Linux和Windows虚拟机创建之间的参数非常不同。用户特别要求Windows示例。我真的不确定为什么选择了这个答案作为最佳答案,因为它确实不是最佳答案。CHEEKATLAPRADEEP-MSFT在第一条评论中提供的链接提供了一个很好的起点 https://github.com/Azure/terraform-azurerm-vm - htm11h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接