Skip to content

Commit

Permalink
combining Windows VM sample and backup sample
Browse files Browse the repository at this point in the history
  • Loading branch information
TomArcherMsft committed Nov 25, 2024
1 parent 36fce0a commit 72b3c4c
Show file tree
Hide file tree
Showing 4 changed files with 147 additions and 190 deletions.
31 changes: 0 additions & 31 deletions quickstart/101-backup-vm/README.md

This file was deleted.

229 changes: 133 additions & 96 deletions quickstart/101-backup-vm/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -7,149 +7,186 @@ resource "azurerm_resource_group" "rg" {
name = random_pet.rg_name.id
}

resource "random_string" "azurerm_virtual_network_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
resource "random_string" "name" {
length = 12
lower = true
upper = false
numeric = false
special = false
}

resource "azurerm_virtual_network" "example" {
name = coalesce(var.virtual_network_name, "vnet-${random_string.azurerm_virtual_network_name.result}")
# Create virtual network
resource "azurerm_virtual_network" "my_terraform_network" {
name = "${random_string.name.id}-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
address_space = ["10.0.0.0/16"]
}

resource "random_string" "azurerm_subnet_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
# Create subnet
resource "azurerm_subnet" "my_terraform_subnet" {
name = "${random_string.name.id}-subnet"
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.my_terraform_network.name
address_prefixes = ["10.0.1.0/24"]
}

resource "azurerm_subnet" "example" {
name = coalesce(var.subnet_name, "subnet-${random_string.azurerm_subnet_name.result}")
# Create public IPs
resource "azurerm_public_ip" "my_terraform_public_ip" {
name = "${random_string.name.id}-public-ip"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
virtual_network_name = azurerm_virtual_network.example.name
address_prefix = "10.0.2.0/24"
allocation_method = "Dynamic"
}

resource "random_string" "azurerm_network_interface_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
# Create Network Security Group and rules
resource "azurerm_network_security_group" "my_terraform_nsg" {
name = "${random_string.name.id}-nsg"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name

security_rule {
name = "RDP"
priority = 1000
direction = "Inbound"
access = "Allow"
protocol = "*"
source_port_range = "*"
destination_port_range = "3389"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "web"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "80"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}

resource "azurerm_network_interface" "example" {
name = coalesce(var.network_interface_name, "nic-${random_string.azurerm_network_interface_name.result}")
location = azurerm_resource_group.rg.location
# Create network interface
resource "azurerm_network_interface" "my_terraform_nic" {
name = "${random_string.name.id}-nic"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name

ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.example.id
name = "my_nic_configuration"
subnet_id = azurerm_subnet.my_terraform_subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.my_terraform_public_ip.id
}
}

resource "random_string" "azurerm_virtual_machine_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
# Connect the security group to the network interface
resource "azurerm_network_interface_security_group_association" "example" {
network_interface_id = azurerm_network_interface.my_terraform_nic.id
network_security_group_id = azurerm_network_security_group.my_terraform_nsg.id
}

resource "azurerm_virtual_machine" "example" {
name = coalesce(var.virtual_machine_name, "vm-${random_string.azurerm_virtual_machine_name.result}")
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
network_interface_id = azurerm_network_interface.example.id
vm_size = "Standard_D2s_v3"

delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
# Create storage account for boot diagnostics
resource "azurerm_storage_account" "my_storage_account" {
name = "diag${random_id.random_id.hex}"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
account_tier = "Standard"
account_replication_type = "LRS"
}

storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04-LTS"
version = "latest"
# Create virtual machine
resource "azurerm_windows_virtual_machine" "main" {
name = "${random_string.name.id}-vm"
admin_username = "azureuser"
admin_password = random_password.password.result
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
size = "Standard_DS1_v2"

os_disk {
name = "myOsDisk"
caching = "ReadWrite"
storage_account_type = "Premium_LRS"
}

storage_os_disk {
name = "os-disk"
caching = "ReadWrite"
create_option = "FromImage"
source_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2022-datacenter-azure-edition"
version = "latest"
}

os_profile {
computer_name = "hostname"
admin_username = "testadmin"
admin_password = "Password1234!"

boot_diagnostics {
storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
}
}

# Install IIS web server to the virtual machine
resource "azurerm_virtual_machine_extension" "web_server_install" {
name = "${random_string.name.id}-wsi"
virtual_machine_id = azurerm_windows_virtual_machine.main.id
publisher = "Microsoft.Compute"
type = "CustomScriptExtension"
type_handler_version = "1.8"
auto_upgrade_minor_version = true

settings = <<SETTINGS
{
"commandToExecute": "powershell -ExecutionPolicy Unrestricted Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools"
}
SETTINGS
}

os_profile_linux_config {
disable_password_authentication = false
# Generate random text for a unique storage account name
resource "random_id" "random_id" {
keepers = {
# Generate a new ID only when a new resource group is defined
resource_group = azurerm_resource_group.rg.name
}

byte_length = 8
}

resource "random_string" "azurerm_recovery_services_vault_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
resource "random_password" "password" {
length = 20
min_lower = 1
min_upper = 1
min_numeric = 1
min_special = 1
special = true
}

resource "azurerm_recovery_services_vault" "example" {
name = coalesce(var.recovery_services_vault_name, "vault-${random_string.azurerm_recovery_services_vault_name.result}")
location = azurerm_resource_group.rg.location
name = "${random_string.name.id}-vault"
resource_group_name = azurerm_resource_group.rg.name
sku = "Standard"
}

resource "random_string" "azurerm_backup_policy_vm_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
location = azurerm_resource_group.rg.location
sku = "Standard"
}

resource "azurerm_backup_policy_vm" "example" {
name = coalesce(var.backup_policy_vm_name, "policy-${random_string.azurerm_backup_policy_vm_name.result}")
name = "${random_string.name.id}-policy"
resource_group_name = azurerm_resource_group.rg.name
recovery_vault_name = azurerm_recovery_services_vault.example.name

timezone = "Pacific Standard Time"

backup {
frequency = "Daily"
time = "23:00"
time = "23:00"
}

retention_daily {
count = 10
count = 7
}
}

resource "random_string" "azurerm_backup_protected_vm_name" {
length = 13
lower = true
numeric = false
special = false
upper = false
}

resource "azurerm_backup_protected_vm" "example" {
resource_group_name = azurerm_resource_group.rg.name
recovery_vault_name = azurerm_recovery_services_vault.example.name
source_vm_id = azurerm_virtual_machine.example.id
backup_policy_id = azurerm_backup_policy_vm.example.id
}
resource_group_name = azurerm_resource_group.rg.name
recovery_vault_name = azurerm_recovery_services_vault.example.name
source_vm_id = azurerm_windows_virtual_machine.main.id
backup_policy_id = azurerm_backup_policy_vm.example.id
}
29 changes: 11 additions & 18 deletions quickstart/101-backup-vm/outputs.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,23 @@ output "resource_group_name" {
value = azurerm_resource_group.rg.name
}

output "virtual_network_name" {
value = azurerm_virtual_network.example.name
}

output "subnet_name" {
value = azurerm_subnet.example.name
}

output "network_interface_name" {
value = azurerm_network_interface.example.name
output "azurerm_recovery_services_vault_name" {
value = azurerm_recovery_services_vault.example.name
}

output "virtual_machine_name" {
value = azurerm_virtual_machine.example.name
output "azurerm_backup_policy_vm_name" {
value = azurerm_backup_policy_vm.example.name
}

output "recovery_services_vault_name" {
value = azurerm_recovery_services_vault.example.name
output "azurerm_windows_virtual_machine_name" {
value = azurerm_windows_virtual_machine.main.name
}

output "backup_policy_vm_name" {
value = azurerm_backup_policy_vm.example.name
output "public_ip_address" {
value = azurerm_windows_virtual_machine.main.public_ip_address
}

output "backup_protected_vm_name" {
value = azurerm_backup_protected_vm.example.name
output "admin_password" {
sensitive = true
value = azurerm_windows_virtual_machine.main.admin_password
}
Loading

0 comments on commit 72b3c4c

Please sign in to comment.