Virtual machine scale sets¶
Virtual machine availability sets¶
Update domain¶
Fault domain¶
Create an azure virtual machine with Terraform¶
Creates an Azure virtual machine and installs Nginx
mkdir -p ~/terraform/azure/compute/azure_vm && \
cd ~/terraform/azure/compute/azure_vm
# main.tf
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
required_version = ">= 1.6.0"
}
provider "azurerm" {
features {}
}
# -------------------------------
# Resource Group
# -------------------------------
resource "azurerm_resource_group" "example" {
name = "IntroAzureRG"
location = "East US" # change to your region
}
# -------------------------------
# Virtual Network and Subnet
# -------------------------------
resource "azurerm_virtual_network" "example" {
name = "example-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
resource "azurerm_subnet" "example" {
name = "example-subnet"
resource_group_name = azurerm_resource_group.example.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefixes = ["10.0.1.0/24"]
}
# -------------------------------
# Public IP
# -------------------------------
resource "azurerm_public_ip" "example" {
name = "my-vm-ip"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
allocation_method = "Static"
sku = "Standard"
}
# -------------------------------
# Network Interface
# -------------------------------
resource "azurerm_network_interface" "example" {
name = "my-vm-nic"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.example.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.example.id
}
}
# -------------------------------
# Virtual Machine
# -------------------------------
resource "azurerm_linux_virtual_machine" "example" {
name = "my-vm"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
size = "Standard_D2s_v5"
admin_username = "azureuser"
network_interface_ids = [
azurerm_network_interface.example.id
]
admin_ssh_key {
username = "azureuser"
public_key = file("~/.ssh/id_rsa.pub")
}
source_image_reference {
publisher = "Canonical"
offer = "0001-com-ubuntu-server-jammy"
sku = "22_04-lts"
version = "latest"
}
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
computer_name = "my-vm"
}
# -------------------------------
# Custom Script Extension (NGINX install)
# -------------------------------
resource "azurerm_virtual_machine_extension" "nginx_setup" {
name = "customScript"
virtual_machine_id = azurerm_linux_virtual_machine.example.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.1"
settings = jsonencode({
fileUris = [
"https://raw.githubusercontent.com/MicrosoftDocs/mslearn-welcome-to-azure/master/configure-nginx.sh"
]
})
protected_settings = jsonencode({
commandToExecute = "./configure-nginx.sh"
})
}