AWS → STACKIT · RUNBOOK

Cutover- en rollbackrunbook van AWS naar STACKIT

Een cutover is een reeks kleine, omkeerbare stappen gevolgd door één onomkeerbare. Dit runbook ordent de stappen zoals StackToIT dat doet voor een demo-omgeving (een PostgreSQL-database, een bucket, een server en een DNS-zone), geeft elke stap een eigenaar, een controle en een weg terug, en markeert het punt waarna de weg terug een herbouw vanuit back-ups is.

Zo gebruikt u dit runbook

De volgorde komt uit het uitvoeringsplan van de run, de eigenaren en rollbackregels uit de handmatige stappen die de run schrijft (execution/manual/actions.md). Rijen met de markering (praktijk) zijn algemene best practices die de run niet schrijft.

  • Bron van de volgorde

    Afhankelijkheden bepalen de golven; de cutoverstappen hebben "after"-koppelingen, dus gereedheid volgt op de laatste datareconcile, de omschakelingen volgen op gereedheid en het rollbackbesluit volgt op elke controle.

  • Niets draait vanzelf

    StackToIT maakt, wijzigt en verwijdert niets. Elke stap wordt uitgevoerd door een persoon, door OpenTofu of door een script dat uw team uitvoert.

  • Geen tijdsduren

    Het plan noemt geen onderhoudsvenster en verzint er geen. Neem de duur uit uw proefrun, niet uit een tabel.

De bouwvolgorde: drie golven

Uit migration/technical-sequencing.md van de demorun: negen eenheden in drie golven. Eenheden van één golf kunnen parallel verhuizen; het bestand noemt dit een startpunt voor uw golfplan, geen planning.

Golfplanmigration/technical-sequencing.md
## Wave 1 — 4 unit(s)

| Unit | Class | Target |
|---|---|---|
| `aws_route53_zone.main` | DIRECT / MEDIUM | STACKIT DNS |
| `aws_s3_bucket.uploads` | RECONFIGURE / MEDIUM | STACKIT Object Storage |
| `aws_secretsmanager_secret.api_key` | RECONFIGURE / MEDIUM | STACKIT Secrets Manager |
| `aws_vpc.app` | RECONFIGURE / MEDIUM | STACKIT project networking / Network Area (SNA) |

## Wave 2 — 3 unit(s)

| Unit | Class | Target |
|---|---|---|
| `aws_security_group.db` | RECONFIGURE / MEDIUM | STACKIT security group |
| `aws_subnet.app_a` | RECONFIGURE / MEDIUM | STACKIT network |
| `aws_subnet.app_b` | RECONFIGURE / MEDIUM | STACKIT network |

## Wave 3 — 2 unit(s)

| Unit | Class | Target |
|---|---|---|
| `aws_db_instance.orders` | REPLATFORM / MEDIUM | STACKIT PostgreSQL Flex |
| `aws_instance.app` | RECONFIGURE / MEDIUM | STACKIT Compute Engine |

Fase 1 · Vóór het venster

StapEigenaar · gereed wanneerRollback
Beantwoord de openstaande beslissingen: de methode voor dataverplaatsing van de database en van de bucket, de opt-in voor de S3-API-aanroepen, het bootimage van de server, de standaardwaarden voor dimensionering en endpointArchitecten · de stappen die op een beslissing wachten, worden vrijgegeven (executive/decisions.md; de demo heeft 6 beslissingen, waarvan 5 stappen tegenhouden)Er is nog niets gewijzigd
Vul de variabelen in (project_id, toegangsscope, client-CIDR's, storage class, image, machinetype), rond de voorstappen van execution/terraform/apply.md af en pas daarna de gereviewde Terraform toe (OpenTofu voert alle stappen in één apply uit)Platformteam · elk item van execution/verify/checks.md is afgevinktVernietig de nieuwe STACKIT-resources; de bron blijft onaangeroerd (praktijk)
Verlaag de TTL van de zone en van de delegatie ervan en wacht dan de oude TTL af (de grootste TTL van de demozone is 300 s)Network Architect · de oude TTL is verstrekenVerhoog de TTL weer (praktijk)
Vraag elk record rechtstreeks op bij een STACKIT-nameserver en vergelijk met Route 53Network Architect · antwoorden komen overeen, behalve waar de waarde een AWS-endpoint isPas de registrar niet aan voordat ze overeenkomen
Preflight en proefrun voor data van de database en van de bucket; eerste kopie en, waar de methode dat kent, bewaking van de replicatieData Architect · de verstreken tijd van elk onderdeel is vastgelegd en het venster voor de schrijfstop is daarop afgestemdVerwijder de scratch-instance; de bron is ongewijzigd
Herstelcontrole: kloon de nieuwe PostgreSQL Flex-instance naar een tijdstip, lees de kloon, vergelijk, leg de duur vast en verwijder de kloonStorage Architect · de kloon komt overeen met de bron; de bewaardatum van de AWS-back-up is vastgelegdEen controle wijzigt niets; verwijder de scratch-resources
Beslis nu of schrijfacties op het doel na het omschakelen worden teruggekopieerd of als verloren worden geaccepteerdMigration Owner · beslissing vastgelegd vóór het venster, niet tijdens het incidentNiet van toepassing

Fase 2 · Schrijfstop en laatste kopie

StapEigenaar · gereed wanneerRollback
Cutovergereedheid: bevestig dat elke workloadstap en dataverplaatsing is afgerond vóór de eerste omschakelingMigration Owner · elke stap waarop de cutovergereedheid volgt, is als afgerond vastgelegdEen bevestiging wijzigt niets
Schrijfstop: som op wie schrijft, leg de verbindingsinstellingen van elke client vast en stop de services, jobs en migraties die schrijvenMigration Owner · geen enkele client schrijft naar de bronStart de schrijvers weer tegen de bron: er is niets gewijzigd
Laatste kopie: dump en restore binnen de schrijfstop, of wacht tot de replicatielag nul is, kopieer de sequences en schakel de subscription uit; kopieer de laatste objecten van de bucketData Architect · de lag was 0 en de sequences op het doel zijn niet lager dan die van de bronHet slot staat nog op de bron en de bron is onaangeroerd: zet de schrijvers terug
Reconcile: rijaantallen, checksums, sequences en één query die de applicatie uitvoert; objectaantallen en sleutellijsten voor de bucket; leg GO of NO-GO vastData Architect · cijfers zijn aan beide kanten gelijkBij NO-GO voert u de rollback uit zonder iets om te schakelen

Fase 3 · De omschakeling

StapEigenaar · gereed wanneerRollback
Schakel de verbinding om van de applicaties die de database gebruiken: host, poort, databasenaam en inloggegevensData Architect · elke applicatie verbindt met PostgreSQL Flex en de AWS-instance ontvangt geen lees- of schrijfactiesZet de configuratie terug; wat intussen naar het doel is geschreven, staat niet in AWS
Schakel de applicaties om die de bucket gebruiken: endpoint, bucketnaam en toegangssleutelsStorage Architect · applicaties gebruiken de STACKIT-bucket, de AWS-bucket ziet geen verzoekenZet de configuratie terug naar de AWS-bucket
Verkeersomschakeling voor de server: verplaats clients van het AWS-adres naar het STACKIT-adresNetwork Architect · verzoeken bereiken het STACKIT-adres, het AWS-adres ontvangt er geenWijzig de clients terug; de AWS-resources blijven tot de GO
Delegatiewijziging van de zone: vervang de Route 53-nameservers door die van STACKIT, bij de registrar of in de bovenliggende zoneNetwork Architect · de bovenliggende zone geeft de NS-records van STACKIT terug en een resolver die na één NS-TTL van de bovenliggende zone wordt bevraagd, geeft hetzelfde antwoordZet de NS-records terug naar Route 53; houd de STACKIT-zone minstens één NS-TTL van de bovenliggende zone aan
Afronding van de cutover: bevestig dat elke omschakeling als afgerond is vastgelegdMigration Owner · elke omschakeling is als afgerond vastgelegd en de cutover als voltooidEen bevestiging wijzigt niets

De twee stappen die de rollback dragen

Letterlijke regelbereiken uit execution/manual/actions.md van de demorun: het risico en de rollback van de delegatiewijziging, daarna de kop en de rollback van de stap voor het rollbackbesluit. De lange afhankelijkheids- en statusregels ertussen zijn weggelaten.

Delegatiewijziging · risico en rollbackexecution/manual/actions.md
- Risk: while resolvers hold the old delegation (one parent NS TTL) some answer from Route 53 and some from STACKIT: a record changed in one zone and not in the other is seen by part of the clients only, so both zones hold the same records until the TTL has passed
- Rollback (manual): set the NS records at the registrar (or the parent zone) back to the Route 53 name servers; resolvers that hold the STACKIT delegation keep it for one parent NS TTL, so the STACKIT zone stays in service for at least that long after the rollback, and the Route 53 zone is retired only after the GO recorded at the rollback decision step
Rollbackbesluit · wat, waarom, wie, wanneerexecution/manual/actions.md
#### The rollback decision step (`MAN/verify/rollback-decision`)

- Phase: Verification
- What: Decide GO or ROLLBACK for the migration once every check of the verification is done: GO lets the source resources be retired, ROLLBACK reverts the cutover and keeps AWS serving
- Why: reverting the cutover is a change of addresses only while the AWS resources exist; after the first decommission step the way back is a rebuild from backups
- Who: Migration Owner
- When: after every check of the verification
Rollbackbesluit · risico en rollbackexecution/manual/actions.md
- Risk: the decision point follows every check of the verification (each is also an action-complete precondition); the retirement steps depend on it, and through it on the checks
- Rollback (manual): on ROLLBACK, revert each cutover step as its rollback says (the traffic switch of aws_instance.app, the delegation change of the hosted zone of aws_route53_zone.main, the switch of the applications that use aws_s3_bucket.uploads, the switch of the applications that use aws_db_instance.orders) and start no decommission step; on GO nothing is reverted

Fase 4 en 5 · Controleren, beslissen, uitfaseren

StapEigenaar · gereed wanneerRollback
Endpointcontrole direct na de verkeersomschakeling, daarna de datacontroles voor de database en de bucket: aantallen komen overeen, de applicatie leest gemigreerde records, een testschrijfactie wordt teruggelezenNetwork, Data en Storage Architects · status en inhoud komen overeen met wat het AWS-adres gafControles wijzigen niets; verwijder het testrecord dat ze schreven
Rollbackbesluit: leg GO of ROLLBACK vast met de datum en het resultaat van elke controleMigration Owner · besluit vastgelegdBij ROLLBACK draait u elke omschakeling terug zoals de eigen rollback aangeeft en start u geen uitfaseringsstap
Ruim de dataverplaatsing op: verwijder de subscription en publication, haal de verplaatsingshost uit de toegangslijst, verwijder dumpbestanden, roteer de inloggegevens en bewaar een laatste snapshot van de bron; rds.logical_replication terugzetten betekent een reboot, een tweede onderbreking van de bron als u de bron behoudtData Architect · er blijft geen slot, subscription, publication of dumpbestand over en de verplaatsingshost staat niet meer in de toegangslijstGeen: na het opruimen is de laatste snapshot van de bron de weg terug
Faseer elke AWS-resource afzonderlijk uit (database, secret, server, bucket, zone, security group, subnets, netwerk), elk pas nadat de resources die ervan afhankelijk zijn, zijn verwijderdEigenaar van elke resource · de resource bestaat niet meer in het AWS-account en de kosten verdwijnen van de factuurOnmogelijk voor de database: alleen de laatste back-up herstelt de data, in een nieuwe resource
Schakel instance protection in voor kritieke productie-instances van PostgreSQL Flex (praktijk; de release notes van STACKIT adviseren dit, omdat het verwijderen van een instance zonder die bescherming direct tot dataverlies leidt)Data Architect · bescherming ingeschakeldSchakel die bewust uit wanneer u moet verwijderen

Het DNS-concept achter de delegatiestap

De STACKIT DNS-zone en recordset die de demorun schreef (terraform/dns.tf, zonder commentaar). Het record houdt de TTL van 300 s van de bron aan.

STACKIT-Terraform van StackToITterraform/dns.tf
resource "stackit_dns_zone" "main" {
  project_id = var.project_id
  name       = "orders.example.com"
  dns_name   = "orders.example.com"
}

resource "stackit_dns_record_set" "app" {
  project_id = var.project_id
  zone_id    = stackit_dns_zone.main.zone_id
  name       = "www.orders.example.com"
  type       = "A"
  records    = ["203.0.113.10"]
  ttl        = 300
}

Regels voor de rollback

Waar de weg terug eindigt en wat u onderweg opgeeft.

  • Houd de bron intact tot de GO

    Het plan maakt de bron na de schrijfstop nooit alleen-lezen en wijzigt die niet, dus een rollback is slechts configuratie die wordt teruggezet. Verwijder niets in AWS voordat het rollbackbesluit GO is.

  • Schrijfacties na de omschakeling

    Wat de applicaties na de omschakeling naar STACKIT schreven, staat niet in AWS. Kopieer het terug met een apart geoefende methode of accepteer het verlies, en beslis vóór het venster.

  • DNS vraagt geduld

    Resolvers houden de oude delegatie na een wijziging één NS-TTL van de bovenliggende zone vast, dus beide zones moeten zo lang dezelfde records bevatten. De TTL van de delegatie bij de registrar staat niet in de bron.

  • DNSSEC (praktijk)

    AWS documenteert voor de omgekeerde richting dat een domein niet door twee providers tegelijk kan worden ondertekend en dat het DS-record eerst moet worden verwijderd. Is uw zone ondertekend, plan het DS-record dan in beide richtingen.

  • Het punt zonder terugkeer

    Na de eerste uitfaseringsstap is de weg terug een herbouw vanuit back-ups. Daarom staat de beslisstap apart en draagt die een datum en het resultaat van elke controle.

Vragen van teams

Hoe lang moet het onderhoudsvenster zijn?

Het plan noemt geen venster en verzint er geen. Neem de kopieertijden uit uw proefrun, tel de vergelijking en de omschakeling erbij op en stem het venster af met de applicatie-eigenaren.

Kan StackToIT de cutover voor ons uitvoeren?

Nee. StackToIT schrijft de stappen, eigenaren en controles. Een executor die het plan stap voor stap zou uitvoeren, wordt in het pakket beschreven als ontworpen en niet geïmplementeerd.

Schakelen we eerst DNS om of eerst de data?

Het plan ordent eerst de datareconcile, dan gereedheid, dan de omschakelingen. De delegatiewijziging wacht tot de STACKIT-zone elk record bevat en de verlaagde TTL is verstreken.

Wat als de reconcile mislukt?

Voer de rollback uit zonder iets om te schakelen. De clients wijzen nog naar de bron, die actueel is tot de schrijfstop.

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