azure-devopsterraformazure-virtual-machineazure-vm-extension

Is it possible to deploy Azure VM Applications using Devops


I've just explored the Azure VM Application feature, and it's genuinely valuable. However, the available deployment options seem limited, primarily manual or through policies. I'm curious if it's viable to deploy Azure VM Applications using DevOps or Terraform. Can anyone share some insights or guidance on achieving this? Thanks in advance!


Solution

  • Yes: You can create one with below config example given in terraform doc:

    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
          version = "3.81.0"
        }
      }
    }
    
    provider "azurerm" {
      # Configuration options
    } 
    
    
    
    variable "prefix" {
          default = "tfvmex"
        }
    
    resource "azurerm_resource_group" "example" {
      name     = "${var.prefix}-resources"
      location = "West Europe"
    }
    
    resource "azurerm_virtual_network" "main" {
      name                = "${var.prefix}-network"
      address_space       = ["10.0.0.0/16"]
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
    }
    
    resource "azurerm_subnet" "internal" {
      name                 = "internal"
      resource_group_name  = azurerm_resource_group.example.name
      virtual_network_name = azurerm_virtual_network.main.name
      address_prefixes     = ["10.0.2.0/24"]
    }
    
    resource "azurerm_network_interface" "main" {
      name                = "${var.prefix}-nic"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
    
      ip_configuration {
        name                          = "testconfiguration1"
        subnet_id                     = azurerm_subnet.internal.id
        private_ip_address_allocation = "Dynamic"
      }
    }
    
    resource "azurerm_virtual_machine" "main" {
      name                  = "${var.prefix}-vm"
      location              = azurerm_resource_group.example.location
      resource_group_name   = azurerm_resource_group.example.name
      network_interface_ids = [azurerm_network_interface.main.id]
      vm_size               = "Standard_DS1_v2"
    
      # Uncomment this line to delete the OS disk automatically when deleting the VM
      # delete_os_disk_on_termination = true
    
      # Uncomment this line to delete the data disks automatically when deleting the VM
      # delete_data_disks_on_termination = true
    
      storage_image_reference {
        publisher = "Canonical"
        offer     = "0001-com-ubuntu-server-jammy"
        sku       = "22_04-lts"
        version   = "latest"
      }
      storage_os_disk {
        name              = "myosdisk1"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Standard_LRS"
      }
      os_profile {
        computer_name  = "hostname"
        admin_username = "testadmin"
        admin_password = "Password1234!"
      }
      os_profile_linux_config {
        disable_password_authentication = false
      }
      tags = {
        environment = "staging"
      }
    }