AZURE VIRTUAL MACHINES → STACKIT COMPUTE · HANDLEIDING

Azure Virtual Machines naar STACKIT Compute, stap voor stap

Deze handleiding voert een kleine Azure-omgeving (een Linux-VM met een datadisk, een Windows-VM, één subnet) op 4 november 2026 door StackToIT en volgt de uitvoer bestand voor bestand: de invoer, de twee runs, de STACKIT-server en het volume die de engine opstelt, en de beslissingen over image, grootte en login die bij u blijven.

De handleiding in zes stappen

Elke stap noemt het bestand waarin het antwoord staat, zodat u het op uw eigen Terraform kunt herhalen.

  1. 1. Zet de omgeving in één map

    StackToIT leest azurerm-Terraform uit een map en maakt nooit verbinding met een Azure-account. De demo is één main.tf met een resourcegroep, een virtueel netwerk, een subnet, een Linux-VM met een beheerde datadisk en een Windows-VM.

  2. 2. Voer het assessment uit

    Het commando is stacktoit assess met de invoermap en een uitvoermap. Deze handleiding voert het offline uit; OpenTofu-validatie van de bron is uitgeschakeld omdat er geen providermirror beschikbaar was.

  3. 3. Lees wat geblokkeerd is

    Een variabele zonder waarde houdt de eenheden tegen die de variabele lezen (en alles wat daarvan afhangt). De eerste run noemt de variabele en het bestand dat die nodig heeft, en de console meldt hoeveel eenheden geen concept hebben.

  4. 4. Lever de waarde aan en voer opnieuw uit

    Een variabelenbestand in de beoordeelde map volstaat. De tweede run stelt alle vier de eenheden op die een STACKIT-resource hebben: subnet, beide VM's en de datadisk.

  5. 5. Lees het concept

    terraform/compute.tf bevat de servers, het volume en de koppeling. Elk blok heeft beoordelingsopmerkingen bij de instellingen die niet konden worden overgenomen.

  6. 6. Beslis en verplaats daarna de schijven

    Image, machinetype, opslagklasse, login en licenties zijn variabelen of beslissingen. De datadisk heeft geen gekozen mechanisme: migration/data-movement.md meldt dat, en de verplaatsing plant u zelf.

Stap 3 en 4: een ontbrekende variabele, daarna een volledige run

Dezelfde omgeving, tweemaal beoordeeld. Links: de twee regels van de consolesamenvatting na de eerste run, waarin de variabele voor de SSH-sleutel geen waarde had. Rechts: dezelfde twee regels nadat een terraform.tfvars met demowaarden naast main.tf was geplaatst.

Eerste run, geen variabelenbestandconsole output
Source        9 resources · 5 units · visibility: Required input missing
Migration     2 drafted · 1 need no resource · 2 have no draft because an input the source needs is not in the package (of 5 units: 3 the draft considered, 2 have no draft)
Tweede run, met terraform.tfvarsconsole output
Source        9 resources · 5 units · visibility: Complete
Migration     4 drafted · 1 need no resource (of 5 units the draft considered)
  • Vereiste invoer ontbreekt

    De eerste run meldt de bron als onvolledig en stelt 2 van de 5 eenheden op: het subnet en de Windows-VM. De Linux-VM heeft geen concept omdat de SSH-sleutel uit een variabele komt die niemand heeft aangeleverd, en de datadisk heeft er geen omdat die aan die VM hangt. Het architectenrapport noemt de variabele en de regel van main.tf die de variabele leest.

  • Er wordt niets geraden

    De engine verzint geen sleutel om de leemte te omzeilen. De waarden in deze demo zijn plaatshouders die voor deze pagina zijn geschreven. In uw omgeving geeft u het echte variabelenbestand mee met de beoordeelde map, of verklaart u een invoer bewust als vervallen.

  • De sleutel komt in het concept terecht

    De publieke sleutel uit het variabelenbestand wordt als letterlijke waarde in het blok stackit_key_pair geschreven. Behandel de conceptmap als broncode: beoordeel die voordat die wordt gecommit en houd secrets buiten het beoordeelde variabelenbestand.

Stap 5: de Linux-VM wordt een server met een key pair

Links: de azurerm_linux_virtual_machine zoals geschreven. Rechts: de STACKIT-blokken die de engine ervoor opstelde: het key pair, de netwerkinterface van de bron-NIC en de server. De beoordelingsopmerkingen boven elk blok in het bestand zijn in deze paneel weggelaten; de lijst 'Wat de instellingen van de Azure-VM worden' verderop vat ze samen.

Azure-invoermain.tf
resource "azurerm_linux_virtual_machine" "app01" {
  name                  = "vm-billing-app01"
  location              = azurerm_resource_group.app.location
  resource_group_name   = azurerm_resource_group.app.name
  size                  = "Standard_D4s_v5"
  admin_username        = "azureops"
  network_interface_ids = [azurerm_network_interface.app01.id]
  zone                  = "1"

  admin_ssh_key {
    username   = "azureops"
    public_key = var.admin_public_key
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Premium_LRS"
    disk_size_gb         = 64
  }

  source_image_reference {
    publisher = "Canonical"
    offer     = "0001-com-ubuntu-server-jammy"
    sku       = "22_04-lts-gen2"
    version   = "latest"
  }
}
STACKIT-Terraform van StackToITterraform/compute.tf
resource "stackit_key_pair" "app01" {
  name       = "vm-billing-app01-key"
  public_key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDemoKeyForThisGuideOnlyNotARealKey00000 ops@example.org"
}

resource "stackit_network_interface" "app01_1" {
  project_id = var.project_id
  network_id = stackit_network.vms.network_id
  ipv4       = "10.40.1.10"
}

resource "stackit_server" "app01" {
  project_id        = var.project_id
  name              = "vm-billing-app01"
  machine_type      = var.app01_machine_type
  availability_zone = var.availability_zone
  boot_volume = {
    source_type           = "image"
    source_id             = var.app01_image_id
    size                  = 64
    delete_on_termination = true
  }
  keypair_name       = stackit_key_pair.app01.name
  network_interfaces = [stackit_network_interface.app01_1.network_interface_id]
}
  • De grootte van de bootdisk blijft behouden

    De OS-disk van 64 GB wordt het bootvolume met grootte 64. Het bootvolume start vanaf een imagevariabele, dus het image is een waarde die u aanlevert.

  • De grootte is een variabele, geen gok

    Standard_D4s_v5 staat in de variabelenbeschrijving als ongeveer 4 vCPU en 16 GiB. U kiest het STACKIT-machinetype dat daarbij past. De pagina over machinetypen van STACKIT noemt vaste combinaties van vCPU en RAM, en die afzonderlijk aanpassen is niet mogelijk.

  • De login verhuist naar het image

    Een STACKIT key pair bevat alleen een publieke sleutel. De Azure-beheerdersnaam en de afhandeling van het wachtwoord worden niet overgenomen; de gebruiker voor de login komt uit het image of uit cloud-init-data, en het concept meldt dat in het blok.

  • Het statische adres blijft behouden

    De bron-NIC had het statische privéadres 10.40.1.10, en de opgestelde stackit_network_interface neemt dat over als ipv4 in het netwerk dat uit het subnet (10.40.1.0/24) is opgesteld. De NIC van de Windows-VM was dynamisch, dus de interface krijgt geen vast adres.

De datadisk wordt een volume en een koppeling

Uit dezelfde run. Links: de beheerde disk en de koppeling ervan. Rechts: het volume en de koppelingsresource van het concept, zonder hun beoordelingsopmerkingen.

Azure-invoermain.tf
resource "azurerm_managed_disk" "data" {
  name                 = "disk-billing-app01-data"
  location             = azurerm_resource_group.app.location
  resource_group_name  = azurerm_resource_group.app.name
  storage_account_type = "Premium_LRS"
  create_option        = "Empty"
  disk_size_gb         = 256
  zone                 = "1"
}

resource "azurerm_virtual_machine_data_disk_attachment" "data" {
  managed_disk_id    = azurerm_managed_disk.data.id
  virtual_machine_id = azurerm_linux_virtual_machine.app01.id
  lun                = 0
  caching            = "ReadOnly"
}
STACKIT-Terraform van StackToITterraform/compute.tf
resource "stackit_volume" "data" {
  project_id        = var.project_id
  name              = "disk-billing-app01-data"
  availability_zone = var.availability_zone
  size              = 256
  performance_class = var.data_performance_class
}

resource "stackit_server_volume_attach" "data" {
  project_id = var.project_id
  server_id  = stackit_server.app01.server_id
  volume_id  = stackit_volume.data.volume_id
}
  • Grootte gekopieerd, eenheid te bevestigen

    256 blijft 256. Het concept noteert dat STACKIT de grootte documenteert als GB zonder te zeggen of het GiB of 10^9 bytes betreft, dus controleer de eenheid op het doel voordat er data wordt gekopieerd.

  • Zone, LUN en caching worden niet overgenomen

    Het volume wordt aangemaakt in de zone van de variabele availability_zone, die standaard eu01-1 is. De LUN en de hostcaching ReadOnly hebben geen tegenhanger, dus het gastsysteem moet het volume via de ID vinden en niet via de LUN.

  • De opslagklasse kiest u zelf

    Premium_LRS wordt niet vanzelf gekoppeld aan een prestatieklasse. De variabele data_performance_class somt de klassen van de eu01-catalogus op en valideert uw keuze.

De waarden die het concept aan u overlaat

Links: het demovariabelenbestand dat de Linux-VM in de tweede run vrijmaakte. Rechts: de twee variabelen uit variables.tf van het concept die de Linux-server leest. Geen van beide heeft een standaardwaarde, dus het concept plant pas als u ze instelt.

Demovariabelenbestandterraform.tfvars
admin_public_key   = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDemoKeyForThisGuideOnlyNotARealKey00000 ops@example.org"
win_admin_password = "placeholder-not-a-secret"
STACKIT-Terraform van StackToITterraform/variables.tf
variable "app01_image_id" {
  type        = string
  description = "STACKIT image replacing the image of azurerm_linux_virtual_machine.app01, Azure image Canonical:0001-com-ubuntu-server-jammy:22_04-lts-gen2:latest (public image, or an uploaded raw/qcow2 conversion of the VHD)."
}

variable "app01_machine_type" {
  type        = string
  description = "STACKIT machine type replacing azurerm_linux_virtual_machine.app01 (Azure Standard_D4s_v5 ≈ 4 vCPU / 16 GiB). See https://docs.stackit.cloud/products/compute-engine/server/basics/machine-types/"
}
  • Image-id

    Gebruik een openbaar STACKIT-image, of de id van een image dat u uit de geconverteerde disk hebt geïmporteerd. Het assessment legt het image vast als een instelling die een medewerker controleert aan de hand van de actuele imagecatalogus voordat de id wordt vastgezet.

  • Machinetype

    Dezelfde logica: de variabelenbeschrijving noemt de brongrootte, en de keuze wordt gemaakt aan de hand van de tabellen met machinetypen.

Hoe de demo-omgeving wordt gekoppeld

Azure-resourceSTACKIT-doelMigratieklasse
Virtuele Linux-machineCompute Engine: server, volumes, netwerkinterfaceHerconfiguratie
Virtuele Windows-machineCompute Engine: server, volumes, netwerkinterfaceHerconfiguratie
Beheerde disk met koppelingBlock Storage: volume en server_volume_attachHerconfiguratie
SubnetSTACKIT-netwerk met hetzelfde IPv4-prefixHerconfiguratie
Virtueel netwerkProjectnetwerk of Network Area; geen resource opgesteldHerconfiguratie

Klassen en zekerheidsniveau (MEDIUM voor alle vijf de eenheden) zoals de run ze bepaalde. De netwerkinterface is geen eigen eenheid: die wordt samen met de server opgesteld die er gebruik van maakt.

Wat de instellingen van de Azure-VM worden

Overgenomen uit de beoordelingsopmerkingen in het concept en de openstaande instellingen van het architectenrapport.

  • Beheerdersaccount en wachtwoord

    Niet overgenomen. stackit_server kent geen beheerdersaccount of wachtwoord. Zet een benoemde gebruiker in het image of in de cloud-init-gebruikersdata.

  • Diskcaching en opslagtype

    Niet overgenomen. Het bootvolume krijgt een grootte; de prestatieklasse kiest u zelf.

  • Availability zone

    Azure-zone 1 wordt niet gekoppeld. De server en het volume staan in de zone van de variabele availability_zone; gebruik een affinity group om servers te spreiden.

  • Windows-licentie

    license_type = Windows_Server staat als niet overgenomen vermeld bij de Windows-server. Hoe Windows-licenties op het doel werken, is een vraag voor uw STACKIT-contract, niet voor de Terraform.

  • Resourcegroep

    STACKIT kent geen resourcegroepen. Elke resource komt in var.project_id terecht, en een medewerker bepaalt hoe groepsgrenzen worden gekoppeld aan projecten en rollen.

De schijven overbrengen

De run schrijft het doel en de volgorde. Hij verplaatst geen data.

  1. Exporteer de disk

    Azure kan geen VHD exporteren van een disk die aan een draaiende VM hangt. Stop de VM, of maak een snapshot van de disk en exporteer de snapshot. Een alleen-lezen SAS-URL komt van az disk grant-access, met een levensduur van maximaal 60 dagen, en az disk revoke-access sluit de URL daarna weer.

  2. Converteer

    STACKIT importeert raw, qcow2 en iso. Een VHD wordt eerst geconverteerd, bijvoorbeeld met qemu-img. Het convert-commando met -O raw is het commando dat de eigen pagina van STACKIT toont.

  3. Importeer het image

    Via de STACKIT IaaS API maakt u een image aan (met de beginstatus queued), uploadt u het bestand naar de upload-URL die de aanroep teruggeeft en controleert u of het image AVAILABLE is voordat u het gebruikt. De gedocumenteerde maximale imagegrootte is 70 GB, dus een grotere systeemdisk vergt een andere route, zoals een opnieuw opgebouwd image.

  4. Maak de server aan

    Zet app01_image_id op de nieuwe image-id en voer apply uit. Datavolumes worden leeg aangemaakt en gekoppeld; de data erop kopieert u daarna.

  5. Plan de datakopie

    migration/data-movement.md toont de datadisk als stateful eenheid met het mechanisme UNKNOWN. Ingerichte capaciteit (256 GB) is niet de omvang van de data. Wijzigingsfrequentie, toegestane downtime en consistentie bepalen de keuze tussen een kopie op blokniveau, een synchronisatie op bestandsniveau en een export op applicatieniveau.

Beslissingen die de architect neemt

  • Machinetype per server

    Uit de brongrootte en het werkelijke gebruik, niet uit de naam van de Azure-grootte.

  • Image per server

    Een openbaar STACKIT-image of een geïmporteerde conversie; gecontroleerd en daarna vastgezet.

  • Prestatieklasse

    Eén variabele voor de datavolumes, zodat opslag op één plaats wordt bepaald.

  • Login en hardening

    Benoemde gebruikers, SSH-sleutels, wachtwoordbeleid en agents komen uit het image of cloud-init.

  • Volgorde van de verplaatsingen

    De run zet het netwerk eerst, de servers erna en de datadisk als laatste (golf 4). Een planning is aan u.

Vragen over het verplaatsen van Azure-VM's

Converteert StackToIT mijn VHD of kopieert het de data?

Nee. StackToIT leest Terraform en schrijft een STACKIT-concept en een plan. Het maakt nooit verbinding met Azure en verplaatst geen data. Exporteren, converteren, importeren en kopiëren van disks zijn stappen die een medewerker uitvoert.

Waarom krijgt een VM in de eerste run geen concept?

Een variabele die de VM leest, had geen waarde. De engine weigert een eenheid op te stellen waarvan de invoer ontbreekt en noemt de variabele, zodat de leemte zichtbaar is in plaats van met een gok te worden gevuld. Lever een variabelenbestand aan en voer opnieuw uit.

Kan ik de grootte van de Azure-VM behouden?

Niet bij naam. STACKIT-machinetypen zijn een vaste lijst combinaties van vCPU en RAM. Het concept noemt de brongrootte als hint en laat het machinetype aan u over.

Is de Terraform gereed om toe te passen?

Nee. Het is een concept ter beoordeling: image, machinetype en project-id zijn variabelen zonder standaardwaarde, en de openstaande instellingen vereisen eerst een antwoord.

Bronnen

Uw volgende stap: STACKIT.

Vertel ons over uw omgeving, dan laten wij zien wat StackToIT daarvoor oplevert: doelarchitectuur, Terraform-artefacten en een gestructureerd migratieplan.

Laat uw gegevens achter, onze specialisten nemen contact met u op.

Liever zelf een e-mail sturen? connect@stacktoit.com

Wij gebruiken uw gegevens alleen om dit verzoek te beantwoorden en een mogelijke pilot te bespreken. Privacyverklaring