Create Multiple Azure Windows VMs With Terraform

In this blog post, I will show you how to create multiple Windows virtual machines in Microsoft Azure using Terraform.

To create multiple Windows Machines, I will use the original Terraform configuration for creating a single VM and add the count argument to give each VM a different name (including the NIC).

Configuration

The full configuration is listed below. Make sure you set the password for the VM.

terraform {
   required_providers {
     azurerm = {
       source = "hashicorp/azurerm"
       version = "2.41.0"
     }
   }
 }
 provider "azurerm" {
 }
 resource "azurerm_resource_group" "rg" {
   name     = "TFRDemo"
   location = "westus"
 }
 resource "azurerm_virtual_network" "rg" {
   name                = "rg-network"
   address_space       = ["10.0.0.0/16"]
   location            = azurerm_resource_group.rg.location
   resource_group_name = azurerm_resource_group.rg.name
 }
 resource "azurerm_subnet" "rg" {
   name                 = "internal"
   resource_group_name  = azurerm_resource_group.rg.name
   virtual_network_name = azurerm_virtual_network.rg.name
   address_prefixes     = ["10.0.2.0/24"]
 }
 resource "azurerm_network_interface" "rg" {
   count = 2  
   name                = "AZ-VM-00-NIC-${count.index}"
   location            = azurerm_resource_group.rg.location
   resource_group_name = azurerm_resource_group.rg.name
 ip_configuration {
     name                          = "internal"
     subnet_id                     = azurerm_subnet.rg.id
     private_ip_address_allocation = "Dynamic"
   }
 }
 resource "azurerm_windows_virtual_machine" "rg" {
   count = 2  
   name                = "AZ-VM-00-${count.index}"
   resource_group_name = azurerm_resource_group.rg.name
   location            = azurerm_resource_group.rg.location
   size                = "Standard_F2"
   admin_username      = "SETUSERNAME"
   admin_password      = "SETPASSWORD
   network_interface_ids = [
     azurerm_network_interface.rg.*.id[count.index],
   ]
 os_disk {
     caching              = "ReadWrite"
     storage_account_type = "Standard_LRS"
   }
 source_image_reference {
     publisher = "MicrosoftWindowsServer"
     offer     = "WindowsServer"
     sku       = "2016-Datacenter"
     version   = "latest"
   }
 }

1 comment

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.