HUAWEI CLOUD → STACKIT · TUTORIAL

Huawei Cloud Terraform naar STACKIT, stap voor stap

U heeft een Huawei Cloud-omgeving in Terraform en wilt weten wat een overstap naar STACKIT vergt. Deze uitleg neemt één kleine module mee van het commando tot het beoordeelde resultaat: wat u uitvoert, welke bestanden u als eerste opent, hoe het ene open verzoek wordt beantwoord en wat de tweede run verandert. Elke getoonde waarde is op 4 november 2026 door de run geschreven.

De invoer: een module met variabelen

Zes resources in één main.tf (een VPC, een subnet, een security group met één regel, een server en een OBS-bucket), een variabelenbestand en een bestand terraform.tfvars. Links de variabelen, rechts de server en de bucket die ze lezen.

Variabelenvariables.tf
variable "project" {
  type    = string
  default = "shop"
}

variable "image_id" {
  type = string
}

variable "flavor_id" {
  type    = string
  default = "s6.large.2"
}
Server en bucketmain.tf
resource "huaweicloud_compute_instance" "app" {
  name               = "${var.project}-app-01"
  image_id           = var.image_id
  flavor_id          = var.flavor_id
  availability_zone  = "eu-west-101a"
  security_group_ids = [huaweicloud_networking_secgroup.app.id]
  system_disk_type   = "SSD"
  system_disk_size   = 40

  network {
    uuid = huaweicloud_vpc_subnet.app.id
  }
}

resource "huaweicloud_obs_bucket" "uploads" {
  bucket     = "${var.project}-uploads"
  acl        = "private"
  versioning = true
}
  • Variabelen zijn opgelost

    terraform.tfvars levert image_id, dus de run meldt de bron als volledig. Een variabele zonder standaardwaarde en zonder waarde zou in plaats daarvan als hiaat worden genoemd; de DMS-gids toont dat geval.

  • Bewaar het lockbestand

    De run markeert elke eenheid met een waarschuwing dat de providerversie niet met een lockbestand is vastgezet. De versie declareren in required_providers is daarvoor niet genoeg; commit .terraform.lock.hcl naast de module.

  • Er verlaat niets uw machine

    StackToIT leest de bestanden. Het maakt geen verbinding met een Huawei Cloud-account en de run is offline uitgevoerd.

Het commando en de eerste run

Eén commando met de module en een uitvoermap, in de syntaxis van de documentatie van de StackToIT-CLI. De twee mapnamen zijn voorbeelden; de demo zelf is gestart vanuit de modulemap met een aparte uitvoermap. De run gebruikte --offline en --no-validate: de tweede slaat de OpenTofu-controle van de bron over, waarvoor de provider lokaal beschikbaar moet zijn. De samenvatting die de run op de console toont, leest u als eerste.

Commandoshell
stacktoit assess ./shop-terraform ./shop-out --offline --no-validate
  • Vijf eenheden, geen zes

    De regel van de security group wordt samen met de groep beoordeeld, dus zes resources leveren vijf eenheden op.

  • De samenvatting op de console lezen

    De samenvatting laat zien hoe elke eenheid wordt gedekt. Elke eenheid wordt geclassificeerd en krijgt een doel en een reden, en StackToIT schrijft een STACKIT-Terraform-concept dat uw architecten beoordelen.

  • De open verzoeken lezen

    Eén open verzoek blokkeert het concept en de run geeft aan dat 4 andere verzoeken voorkeuren zijn die de run niet kan toepassen. Beide worden hieronder toegelicht.

Welk bestand beantwoordt welke vraag

De run schrijft een map, geen los rapport. Dit is de volgorde waarin deze bestanden voor deze module nuttig waren.

BestandVraag die het beantwoordtWat deze run bevatte
index.htmlHoe ziet de hele omgeving eruit?Het overzicht per eenheid; het opent offline in een browser.
assessment.jsonWelke klasse, welk doel en welke reden krijgt elke resource?Vijf eenheden, allemaal RECONFIGURE: de security group op zekerheidsniveau LOW, de andere vier op MEDIUM.
engineering/architect-report.mdWaarom, en wat blijft er voor ons?Eén vermelding per eenheid met het bewijs achter de regel en de providerwaarschuwing.
migration/technical-sequencing.mdIn welke volgorde gaan de eenheden over?Drie golven, afgeleid uit de verwijzingen tussen de resources.
migration/data-movement.mdWelke data moet worden verplaatst en wie beslist hoe?Eén stateful eenheid, de bucket; het mechanisme is UNKNOWN en de status is DECISION REQUIRED.
execution/manual/actions.mdWat doet een persoon?Vijf handmatige stappen in vier werkpakketten; het eerste is van de Network Architect.
review/inputs.yamlWat vraagt de run nog?Eén stub, target.region, die het concept blokkeert.
terraform/Wat is het STACKIT-concept?terraform.tf, variables.tf en README.md met het concept dat uw architecten beoordelen.

Bestandsnamen en aantallen komen uit de run van deze module. De volledige set opleveringen staat in de StackToIT-documentatie (Engels).

De werkwijze in zeven stappen

Dezelfde volgorde werkt voor een grote omgeving; alleen het lezen kost meer tijd.

  1. Richt de run op de rootmodule

    Kies de map die de infrastructuur declareert, niet een submap van een grotere configuratie. Houd het lockbestand en de variabelenbestanden ernaast.

  2. Offline uitvoeren

    --offline verbiedt uitgaande verzoeken, dus het resultaat hangt alleen af van uw bestanden. Voeg --var-file toe voor waarden die niet in de standaard variabelenbestanden staan.

  3. Lees eerst de samenvatting

    Controleer de zichtbaarheid van de bron (hier: Complete), het aantal eenheden, hoeveel er zijn uitgewerkt, hoeveel handmatig zijn en hoeveel verzoeken openstaan.

  4. Open assessment.json

    Elke eenheid heeft een klasse, een zekerheidsniveau, een doeldienst en een reden. Beschouw zekerheidsniveau LOW als reden om de vermelding in het rapport te lezen voordat u gaat plannen.

  5. Lees de volgorde

    technical-sequencing.md noemt de golven. Eenheden in één golf kunnen parallel overgaan; een eenheid gaat pas over na de eenheden waarvan die afhangt.

  6. Beantwoord wat wordt gevraagd

    Kopieer review/inputs.yaml uit de uitvoermap, vul de waarderegels in, houd uw kopie onder versiebeheer en geef die mee met --inputs.

  7. Geef de werkpakketten door

    actions.md groepeert de handmatige stappen per rol. Geef elke eigenaar zijn werkpakket en bewaar de runmap als vastlegging van wat destijds werd gevraagd.

Het open verzoek beantwoorden

De run schrijft de stub en bindt die aan deze bron; u vult value in en laat de andere regels ongemoeid. Links de stub zoals geschreven, rechts dezelfde regels in de kopie die aan de tweede run is meegegeven.

Template zoals geschrevenreview/inputs.yaml
  - id: INP-TSE-1eaf5b60fa62
    kind: TARGET_SELECTION
    topic: target.region
    scope:
      profile: default
    # options: eu01 | eu02
    value: ""                # pick one of the options above
    # explanation: why you chose this (optional; remove the # to write it)
    answered_by: CUSTOMER_ARCHITECT   # a role, not a person
    answered_at: "2026-11-04"   # YYYY-MM-DD
Beantwoorde kopieinputs.yaml
  - id: INP-TSE-1eaf5b60fa62
    kind: TARGET_SELECTION
    topic: target.region
    scope:
      profile: default
    # options: eu01 | eu02
    value: eu01
    # explanation: why you chose this (optional; remove the # to write it)
    answered_by: CUSTOMER_ARCHITECT   # a role, not a person
    answered_at: "2026-11-04"   # YYYY-MM-DD

Wat de tweede run veranderde

De tweede run gebruikte --inputs met de beantwoorde kopie en schreef een nieuwe uitvoermap. Vergelijk de regel Decisions op de console: links de eerste run, rechts de tweede run.

Eerste runconsole.txt
Decisions     no open item · no decision holds a plan step · Inputs: 0 design inputs wait · 5 open requests (1 blocks the draft — inputs-template.yaml marks it, 4 are preferences this build cannot apply — inputs-template.yaml, NOT APPLICABLE IN THIS BUILD, says where to set each)
Tweede runconsole.txt
Decisions     no open item · no decision holds a plan step · Inputs: 0 design inputs wait · 4 open requests (0 block the draft, 4 are preferences this build cannot apply — inputs-template.yaml, NOT APPLICABLE IN THIS BUILD, says where to set each)
  • Veranderd

    Het blokkerende verzoek is verdwenen: 5 openstaande verzoeken werden 4 en geen van de resterende vier blokkeert het concept. De tweede run meldt het antwoord ook als toegepast, met 0 verouderd en 0 ongeldig.

  • Niet veranderd

    Het concept is hetzelfde: variables.tf had eu01 al als standaardregio. Het antwoord maakt het concept vrij voor beoordeling door uw architecten.

  • Vier voorkeuren

    Publieke adressen, egress, observability en het doelproject worden vastgelegd als verzoeken die deze build niet kan toepassen. De template vermeldt waar u elk ervan in plaats daarvan instelt, bijvoorbeeld in de variabele project_id van het concept.

  • Bewaar beide mappen

    Een nieuwe run op dezelfde uitvoermap bewaart de eerdere run standaard in een submap previous-<run id>; aparte mappen, zoals hier, maken de vergelijking makkelijker.

De volgorde, zoals de run die schreef

Uit technical-sequencing.md. Het subnet wacht op de VPC en de server wacht op het subnet en de security group; de bucket hangt van niets af en staat in golf 1.

Golvenmigration/technical-sequencing.md
## Wave 1 — 3 unit(s)

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_networking_secgroup.app` | RECONFIGURE / LOW | STACKIT security groups |
| `huaweicloud_obs_bucket.uploads` | RECONFIGURE / MEDIUM | STACKIT Object Storage |
| `huaweicloud_vpc.main` | RECONFIGURE / MEDIUM | STACKIT network |

## Wave 2 — 1 unit(s)

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_vpc_subnet.app` | RECONFIGURE / MEDIUM | STACKIT network |

## Wave 3 — 1 unit(s)

| Unit | Class | Target |
|---|---|---|
| `huaweicloud_compute_instance.app` | RECONFIGURE / MEDIUM | STACKIT Compute Engine |

## Cutover (decision support — performed by the customer)

No cutover facts: the scan and the draft established no DNS record set whose value the draft re-binds to a generated address, no public address re-binding, no DNS record unit, no certificate unit and no open cutover decision. That is not a statement that nothing has to be cut over: a name, an address or a certificate outside the scanned source is not seen, and a unit that exists only if OpenTofu decides so at plan time is not read here. StackToIT performs no cutover and gives no time estimate.

Hoe de vijf eenheden uitkwamen

Huawei Cloud-resourceSTACKIT-doelMigratieklasse
VPCSTACKIT-netwerk, met een Network Area waar routering nodig isHerconfiguratie
SubnetSTACKIT-netwerk met een eigen adresbereikHerconfiguratie
Security group en bijbehorende regelSTACKIT security groupsHerconfiguratie
ECS-instanceSTACKIT Compute EngineHerconfiguratie
OBS-bucketSTACKIT Object StorageHerconfiguratie

Klassen zoals de run ze heeft bepaald. De security group is de enige eenheid met zekerheidsniveau LOW. De run merkt op dat de regel zonder koppeling is gecatalogiseerd, dus wat de regel met de groep doet, wordt niet beoordeeld; lees de richting, de poort en het bronbereik zelf.

Beslissingen die bij de architecten blijven

De run benoemt ze, maar neemt ze niet.

  • Regio

    eu01 of eu02. Het antwoord hierboven koos eu01; de andere regio is een andere catalogus en een ander antwoord.

  • Regels van security groups

    STACKIT-regels staan alleen verkeer toe, dus een deny-regel of een prioriteitsvolgorde in de bron vraagt om een beslissing. Deze module heeft één ingress-regel op poort 443, open voor 0.0.0.0/0; beslis of die blijft.

  • Image en flavor

    De flavor wordt een STACKIT-flavor en het image wordt opnieuw opgebouwd of geïmporteerd; geen van beide wordt voor u gekozen.

  • Hoe de bucketdata verhuist

    De omvang, de wijzigingsfrequentie en de toegestane downtime staan niet in de Terraform, dus de run legt het mechanisme vast als onbeslist. De OBS-gids behandelt de opties.

Vragen van teams vóór de eerste run

Heeft de werkwijze toegang nodig tot ons Huawei Cloud-account?

Nee. StackToIT leest Terraform- en OpenTofu-rootmodules die de provider huaweicloud/huaweicloud gebruiken en maakt geen verbinding met een Huawei Cloud-account.

Wat zegt de regel Target in de samenvatting?

De regel telt hoe elke eenheid is gedekt in de run die deze pagina doorloopt. StackToIT schrijft een STACKIT-Terraform-concept dat uw architecten beoordelen, en elke eenheid heeft een klasse, een STACKIT-doel en een reden.

Wat als een variabele geen waarde heeft?

De run noemt het hiaat en markeert de bron als onvolledig in plaats van te gokken. Lever de waarde aan met een variabelenbestand of --var-file en voer de run opnieuw uit; de eenheid wordt dan ermee beoordeeld.

Kunnen we de run na elke wijziging in de Terraform opnieuw uitvoeren?

Ja. Elke run leest de bron zoals die is, schrijft een nieuw run-id en bindt antwoorden aan die bron; een antwoord dat voor iets gewijzigds is geschreven, wordt als verouderd gemeld en past niets toe.

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