# Network resource "azurerm_virtual_network" "main" { name = "${var.prefix}-vnet" location = var.location resource_group_name = var.resource_group_name address_space = ["10.0.0.0/16"] tags = var.tags } resource "azurerm_subnet" "main" { name = "${var.prefix}-subnet" resource_group_name = var.resource_group_name virtual_network_name = azurerm_virtual_network.main.name address_prefixes = ["10.0.0.0/24"] } resource "azurerm_network_security_group" "ssh" { name = "${var.prefix}-nsg" location = var.location resource_group_name = var.resource_group_name security_rule { name = "AllowSSH" priority = 1001 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "22" source_address_prefix = "*" destination_address_prefix = "*" } tags = var.tags } resource "azurerm_public_ip" "main" { name = "${var.prefix}-pip" location = var.location resource_group_name = var.resource_group_name allocation_method = "Static" sku = "Standard" tags = var.tags } resource "azurerm_network_interface" "main" { name = "${var.prefix}-nic" location = var.location resource_group_name = var.resource_group_name ip_configuration { name = "${var.prefix}-ipconfig" subnet_id = azurerm_subnet.main.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.main.id } tags = var.tags } resource "azurerm_network_interface_security_group_association" "ssh" { network_interface_id = azurerm_network_interface.main.id network_security_group_id = azurerm_network_security_group.ssh.id } # Disk resource "azurerm_managed_disk" "data" { name = "${var.prefix}-disk" location = var.location resource_group_name = var.resource_group_name storage_account_type = "PremiumV2_LRS" create_option = "Empty" disk_size_gb = "16" zone = 1 tags = var.tags } resource "azurerm_virtual_machine_data_disk_attachment" "data" { managed_disk_id = azurerm_managed_disk.data.id virtual_machine_id = azurerm_linux_virtual_machine.main.id lun = "1" caching = "None" } # VM resource "azurerm_linux_virtual_machine" "main" { name = "${var.prefix}-vm" location = var.location resource_group_name = var.resource_group_name network_interface_ids = [azurerm_network_interface.main.id] dedicated_host_id = var.dedicated_host_id zone = 1 size = var.vm_size admin_username = "benchmark" admin_ssh_key { username = "benchmark" public_key = var.ssh_public_key } os_disk { caching = "ReadWrite" storage_account_type = "Premium_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts-gen2" version = "latest" } identity { type = "SystemAssigned" } tags = var.tags } resource "azurerm_virtual_machine_extension" "entra_login" { name = "AADSSHLoginForLinux" virtual_machine_id = azurerm_linux_virtual_machine.main.id publisher = "Microsoft.Azure.ActiveDirectory" type = "AADSSHLoginForLinux" type_handler_version = "1.0" tags = var.tags }