AZURERM + AZAPI → STACKIT · HANDLEIDING

AzureRM- en AzAPI-Terraform naar STACKIT: de werkwijze

StackToIT leest Terraform die is geschreven met de provider azurerm of azapi, offline en zonder Azure-account, en schrijft een STACKIT-concept plus de lijst met beslissingen die het niet voor u kan nemen. Deze handleiding doorloopt één demo-omgeving die beide providers combineert, laat zien hoe elk resourcetype wordt gelezen en brengt het beoordelingswerk in volgorde.

Eén commando, één samenvatting

Een voor deze pagina opgestelde demo-omgeving, op 4 november 2026 beoordeeld door StackToIT met de providers azurerm 5.6.0 en azapi 2.12.0. Boven: het commando, met verkort uitvoerpad. Onder: geselecteerde regels van de consolesamenvatting, letterlijk. De demo is uitgevoerd met de optionele bronvalidatie uitgeschakeld.

Commandoshell
stacktoit assess . ./stacktoit-out --offline --no-validate
Consolesamenvatting (geselecteerde regels)console.txt
Source        5 migration units · visibility: Complete
Target        4 Terraform-only · 0 hybrid · 0 API-only · 0 manual · 1 no resource (of 5 units the draft considered)
STACKIT draft (this folder/terraform): 4 units generated · 1 need no resource · 0 left for the architect · 7 variables
Critical open settings    11  (4 resolved of the 15 the units state)
  • Zeven resources, vijf eenheden

    De omgeving bevat een resourcegroep, een netwerk met één subnet, een storage account, een Service Bus-namespace en een Application Insights-component die met azapi zijn geschreven, en één azapi-update. De run groepeert ze in vijf eenheden die worden beoordeeld.

  • Geen verbinding met Azure

    Volgens de StackToIT-documentatie leest StackToIT Terraform die is geschreven met de provider azurerm of azapi en maakt het geen verbinding met een Azure-account. De run heeft de code nodig, geen inloggegevens.

  • De openstaande instellingen vormen het werk

    Elf kritieke instellingen blijven in deze run open; vier van de vijftien die de eenheden vermelden, zijn opgelost. Vijf van de openstaande zijn de scope van de resourcegroep, één per eenheid, voor de Identity Architect; de rest betreft namen, de instellingen van de namespace, het adresbereik en dataresidentie.

azapi-resources erin, STACKIT-resources eruit

Eerste paneel: de drie azapi-resources uit de invoer. Daarna de blokken die de engine voor de eerste twee schreef, één paneel per bestand; de beoordelingsopmerkingen boven elk blok in het bestand zijn hier weggelaten.

Voorbeeldinvoermain.tf
resource "azapi_resource" "queue_namespace" {
  type      = "Microsoft.ServiceBus/namespaces@2024-01-01"
  name      = "sb-portal-gwc"
  location  = azurerm_resource_group.app.location
  parent_id = azurerm_resource_group.app.id

  body = {
    sku = {
      name = "Standard"
      tier = "Standard"
    }
    properties = {
      minimumTlsVersion = "1.2"
    }
  }
}

resource "azapi_resource" "app_insights" {
  type      = "Microsoft.Insights/components@2020-02-02"
  name      = "appi-portal-gwc"
  location  = azurerm_resource_group.app.location
  parent_id = azurerm_resource_group.app.id

  body = {
    kind = "web"
    properties = {
      Application_Type = "web"
      RetentionInDays  = 90
    }
  }
}

resource "azapi_update_resource" "storage_tls" {
  type        = "Microsoft.Storage/storageAccounts@2023-05-01"
  resource_id = azurerm_storage_account.assets.id

  body = {
    properties = {
      minimumTlsVersion = "TLS1_2"
    }
  }
}
STACKIT: RabbitMQterraform/messaging.tf
resource "stackit_rabbitmq_instance" "messaging" {
  project_id = var.project_id
  name       = "messaging"
  plan_name  = var.rabbitmq_plan_name
  version    = var.rabbitmq_version
  parameters = {
    sgw_acl = join(",", var.rabbitmq_allowed_cidrs)
  }
}
STACKIT: Observabilityterraform/observability.tf
resource "stackit_observability_instance" "migrated" {
  project_id = var.project_id
  name       = "migrated-observability"
  plan_name  = var.observability_plan_name
}
  • De typestring beslist

    Een azapi-resource heeft een type zoals Microsoft.ServiceBus/namespaces plus een API-versie, en een body. De run herkent de eenheid aan het type en leest de body voor de instellingen, dus de Service Bus-namespace wordt beoordeeld als Service Bus-namespace.

  • Gedeelde instances

    Beide doelen zijn gedeelde instances: één RabbitMQ-instance voor alle wachtrijen en topics, één Observability-instance voor telemetrie. Wachtrijen en exchanges maakt u zelf aan, en het concept vermeldt dat de gemigreerde alarmen worden herschreven als alertregels.

  • Waarden zonder standaardwaarde

    Het RabbitMQ-plan, de versie en de toegestane CIDR's zijn variabelen zonder standaardwaarde. Bij de versie spreken de catalogus en de lifecycle-pagina van STACKIT elkaar tegen, en het concept benoemt dat verschil in plaats van een keuze te maken.

Hoe de eenheden zijn ingedeeld

Fragment van assessment.json voor vier van de vijf eenheden: de twee azapi-eenheden, het azurerm storage account en het subnet. Per resultaat zijn alleen id, klasse, zekerheidsniveau en doeldienst weergegeven; de waarden zijn zoals de run ze schreef.

StackToIT-assessment (fragment)assessment.json
[
  {
    "id": "azapi_resource.queue_namespace",
    "result": {
      "class": "REPLATFORM",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT RabbitMQ"
      }
    }
  },
  {
    "id": "azapi_resource.app_insights",
    "result": {
      "class": "RECONFIGURE",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT Observability (OpenTelemetry traces, metrics, logs)"
      }
    }
  },
  {
    "id": "azurerm_storage_account.assets",
    "result": {
      "class": "REPLATFORM",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT Object Storage"
      }
    }
  },
  {
    "id": "azurerm_subnet.app",
    "result": {
      "class": "RECONFIGURE",
      "confidence": "MEDIUM",
      "target": {
        "service": "STACKIT network"
      }
    }
  }
]

Hoe elk invoertype wordt gelezen

BronresourceSTACKIT-doelKlasse
azapi_resource, Microsoft.ServiceBus/namespacesRabbitMQ-instanceReplatforming
azapi_resource, Microsoft.Insights/componentsObservability-instanceHerconfiguratie
azurerm_storage_accountObject Storage-bucketReplatforming
azurerm_subnetSTACKIT-netwerk, hetzelfde IPv4-prefixHerconfiguratie
azurerm_virtual_networkGeen resource; Network Area alleen als netwerken privé moeten routerenHerconfiguratie
azapi_update_resourceOndersteunende resource: geen eenheid, kritieke instellingen vermeld voor een medewerkerGeen

Klassen zoals de run ze bepaalde, zekerheidsniveau MEDIUM voor elke eenheid. De updateresource staat onder de ondersteunende resources in terraform/README.md.

De werkwijze in volgorde

  1. Zet de providers vast

    Declareer de versies van azurerm en azapi in required_providers en commit het lockbestand. Zonder lockregel waarschuwt de run dat de versie niet is aangetoond en begrenst hij het zekerheidsniveau op MEDIUM.

  2. Beoordeel

    Voer het commando uit vanuit de map met de rootmodule. Gebruik de offlineoptie als de machine geen netwerk heeft.

  3. Lees de eerste blokkade

    De console noemt de eerste blokkade en de volgende actie met een eigenaarsrol. In deze run wijzen beide naar de Application Insights-eenheid, waarvan de openstaande instelling in decisions.json de scope van de resourcegroep is, met de Identity Architect als eigenaar. Daarnaast markeert inputs-template.yaml de doelregio als de enige vraag die het concept blokkeert: zolang die niet is beantwoord, worden regioafhankelijke vragen afgeleid van de eu01-catalogus.

  4. Beantwoord in het invoerbestand

    Kopieer inputs-template.yaml uit de runmap, vul de waarderegels in, zoals de regio, geef het bestand mee met --inputs en voer de run opnieuw uit op dezelfde uitvoermap. De eerdere run wordt vervangen.

  5. Vul de doelwaarden in

    Variabelen zonder standaardwaarde, zoals het RabbitMQ-plan en de versie, gaan in de kopie van target-values-template.tfvars; voer de run opnieuw uit en de run schrijft de overgenomen waarden naar terraform/. Een eigen variabelenbestand werkt ook.

  6. Beoordeel de concepten en plan daarna

    Lees terraform/ samen met het platformteam en voer daarna tofu init, validate en plan uit in een testproject. StackToIT voert nooit apply uit.

Wat u bij AzAPI mag verwachten

  • De body is dynamisch

    De azapi-provider neemt de requestbody op als dynamische waarde, zodat één resourcetype elke eigenschap van de Azure-API kan dragen. Instellingen komen binnen als geneste sleutels, en de run toont ze in puntnotatie, bijvoorbeeld body.properties.minimumTlsVersion.

  • Updates zijn geen eigen resources

    azapi_update_resource wijzigt eigenschappen van een bestaande resource, en het verwijderen ervan verandert niets. In deze run heeft het geen eenheid; de body, het type en de resource-id staan als instellingen voor een medewerker op een lijst.

  • De bijbehorende opslaginstelling hangt aan geen enkele eenheid

    De update stelt een TLS-minimum in op het storage account, maar de run toont die instelling als door geen enkele eenheid gelezen. Neem hierover zelf een besluit en neem die instelling handmatig over.

  • Typen die de run niet koppelt

    Deze run toont de typen die StackToIT dekt. Komt een azapi-type dat u gebruikt niet in de uitvoer voor, zoek het dan op in de lijst met eenheden en ondersteunende resources van de run voordat u aanneemt dat het is gekoppeld.

Vragen die platformteams stellen

Hebben we Azure-inloggegevens nodig?

Nee. Volgens de StackToIT-documentatie leest StackToIT de Terraform en maakt het geen verbinding met een Azure-account.

Leest StackToIT naast azurerm ook azapi?

Ja. De documentatie noemt beide providers, en deze run beoordeelde azapi-resources voor Service Bus en Application Insights naast azurerm-resources.

Waarom noemt de run een lockbestand?

Zonder regel in het lockbestand kan de run niet aantonen welke providerversie het plan zou gebruiken. Daarom begrenst hij het zekerheidsniveau op MEDIUM en meldt hij dat eenmalig voor de hele omgeving.

Kunnen we het concept direct toepassen?

Nee. Het is een voorstel ter beoordeling. Vul de variabelen in, plan in een testproject en laat eerst een architect over de openstaande instellingen beslissen.

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