STACKTOIT · EEN ECHT ASSESSMENT LEZEN

Zo leest u een echt StackToIT-migratieassessment

Een assessmentmap bevat ruim honderd bestanden. U leest ze niet op volgorde; u leest vijf dingen: de samenvatting, de klasse van elke eenheid, één eenheid helemaal, één beslissing en de planstap die daarop wacht. Deze gids doorloopt dat pad aan de hand van de gepubliceerde AWS Retail Store-run, zodat elk getal hieronder aan het openbare voorbeeld kan worden getoetst.

Begin met de samenvatting, dan met wat niet is vastgesteld

De gepubliceerde AWS Retail Store-run: 282 Terraform-resources, 44 migratie-eenheden. Links: het scanblok van console.txt. Rechts: de validatiematrix die de run eronder afdrukt.

Samenvatting van de scanconsole.txt
StackToIT Assess
────────────────────────────────────────────
Source:                 terraform/ecs/default
Source files:           105
Resources scanned:      282  (0 in the root module · 282 inside 23 module calls)
  support resources:    34  (+12 Terraform helpers, out of scope; 34 + 12 = the 46 support nodes of summary.support.nodes in assessment.json)
Migration units:        44 known-present (44 instances) · 8 conditional  (+41 switched off — see Not in a wave)
Unit dependencies:      109
Modules:                23 module calls (13 external, 10 local): 23 loaded, 0 not downloaded, 0 invalid
  module.dependencies    ../../lib/dependencies  11 units (RECONFIGURE 7 · REPLATFORM 3 · REDESIGN 1) · 13 switched off · 77 resources (+10 nested calls)
  module.retail_app_ecs  ../../lib/ecs           30 known-present units (RECONFIGURE 24 · REPLATFORM 6) · 3 conditional · 3 switched off · 126 resources (+8 nested calls)
  module.tags            ../../lib/tags          0 units · 0 resources
  module.vpc             ../../lib/vpc           3 known-present units (RECONFIGURE 3) · 5 conditional · 25 switched off · 79 resources (+1 nested call)
Source checks:          Built-in source checks passed — OpenTofu validation of the source did not run (LOCK_FILE)
Source completeness:    RUNTIME_TOPOLOGY_PARTIAL — 8 unit(s) have a count/for_each that is not known statically; whether and how often they exist is decided at plan time

STACKIT mapping
────────────────────────────────────────────
DIRECT              0  
RECONFIGURE        34  ███████████████████████ 77%
REPLATFORM          9  ██████ 20%
CONTAINERIZE        0  
REDESIGN            1  █ 2%
MANUAL_REVIEW       0  
BLOCKED             0    (the mapping class BLOCKED, not the execution blockers, which Migration readiness counts)

Confidence  HIGH 0 · MEDIUM 35 · LOW 9
Validatiematrixconsole.txt
Validation matrix (what has been established; nothing here approves the draft)
  Source completeness: PARTIAL (source status RUNTIME_TOPOLOGY_PARTIAL)
  Draft generation: GENERATED (the draft is in terraform/)
  StackToIT draft checks: PASSED (100 checks, none found a violation)
  Global invariants: PASSED (12 of 12 invariants PASS)
  OpenTofu validation: PASSED (tofu init -backend=false and tofu validate accepted the draft; tofu 1.13.1)
  Output schema validation: PASSED (verified at publish: every JSON file that has a schema is validated against it (see run_verification in manifest.json))
  STACKIT plan: NOT RUN (this build runs no plan against a STACKIT project)
  Architect approval: NOT PROVIDED (no review decision is recorded for this run)
  Semantic equivalence: NOT ASSESSED (this build has no measure for it)
  Safe to apply: NOT ASSERTED (StackToIT never asserts it)
  • Eerst de aantallen

    De bron heeft 282 resources en 44 eenheden, 8 eenheden meer worden pas bepaald wanneer OpenTofu plant, en de bronstatus is RUNTIME_TOPOLOGY_PARTIAL. Lees dat vóór de tabel: die status geeft aan dat de inventaris gedeeltelijk is, en waarom.

  • Een klasse is het werk, geen oordeel

    RECONFIGURE 34, REPLATFORM 9, REDESIGN 1, geen enkele BLOCKED. Het zekerheidsniveau is MEDIUM voor 35 eenheden en LOW voor 9, zonder enige HIGH. Het architectenrapport geeft de reden: het voorbeeld levert geen lockbestand mee, en zolang de providerversie niet is vastgezet (commit .terraform.lock.hcl) blijven de eenheden ervan beperkt tot MEDIUM.

  • De matrix zegt wat de run niet heeft gedaan

    Het STACKIT-plan is niet uitgevoerd, er is geen goedkeuring van een architect vastgelegd, equivalentie is niet beoordeeld en safe-to-apply wordt nooit vastgesteld. Een geslaagde statische validatie van het concept is geen goedkeuring, en de run benoemt dat ook zo.

Eén eenheid helemaal: de DynamoDB-tabel

De leerzaamste eenheid van de run is die met de klasse REDESIGN. Links: het record ervan in assessment.json (id, klasse, zekerheidsniveau, doel, reden en review). Rechts: het stackit_mongodbflex_instance-blok dat de run ervoor opstelde, zonder reviewopmerkingen.

StackToIT-assessmentassessment.json
{
  "id": "module.dependencies.module.dynamodb_carts.aws_dynamodb_table.this",
  "result": {
    "class": "REDESIGN",
    "confidence": "MEDIUM",
    "target": {
      "service": "STACKIT MongoDB Flex (alternative — data-model redesign; PostgreSQL Flex JSONB is the other option)",
      "resources": [
        "stackit_mongodbflex_instance"
      ]
    },
    "reason": "There is no DynamoDB-compatible service on STACKIT. The access layer is rewritten against a document store (MongoDB Flex) or relational JSONB (PostgreSQL Flex); key design, capacity modes and conditional writes do not carry over. The draft is an alternative, not an equivalent: one MongoDB Flex instance for the estate's tables, each table a collection with its keys and secondary indexes named as MongoDB indexes.",
    "review": [
      "Rewrite the data access layer against the MongoDB API (queries, conditional writes, transactions).",
      "Size the instance from the tables' data volume and request load; capacity units do not translate."
    ]
  }
}
STACKIT-Terraform van StackToITterraform/data.tf
resource "stackit_mongodbflex_instance" "dynamodb_tables" {
  project_id = var.project_id
  name       = "dynamodb-tables"
  acl        = var.dynamodb_tables_allowed_cidrs
  version    = var.dynamodb_tables_version
  flavor = {
    cpu = var.dynamodb_tables_cpu
    ram = var.dynamodb_tables_ram
  }
  replicas = 3
  storage = {
    class = var.mongodbflex_storage_class
    size  = var.dynamodb_tables_storage_gb
  }
  backup_schedule = "0 2 * * *"
  options = {
    type                       = "Replica"
    point_in_time_window_hours = var.dynamodb_tables_pitr_hours
  }
}
  • De reden is het contract

    Op STACKIT bestaat geen DynamoDB-compatibele dienst, dus het concept is een alternatief, geen gelijkwaardige vervanger. De reden noemt wat niet wordt overgenomen: sleutelontwerp, capaciteitsmodi en voorwaardelijke schrijfacties.

  • Reviewpunten zijn uw takenlijst

    De twee reviewregels zijn taken: de datatoegangslaag herschrijven en de instance dimensioneren, omdat capaciteitseenheden niet vertaalbaar zijn.

  • Variabelen markeren wat alleen u weet

    cpu, ram, storage en de toegangslijst zijn variabelen zonder waarde. De run raadt de omvang van uw data niet.

Eén beslissing: van het register naar de planstap

Een vraag die de code niet kan beantwoorden, wordt een record in decisions.json, een stub in review/decisions.yaml en een handmatige stap in execution-plan.json. Dit is het NAT-egressadres, uit dezelfde run.

Beslissingsregisterdecisions.json
{
  "id": "DEC-NET-STACKITROUTE-NAT-FIXED-EGRESS-ADDRESS-LOST",
  "kind": "NAT_FIXED_EGRESS_ADDRESS_LOST",
  "status": "OPEN",
  "owner_role": "Network Architect",
  "required_by_phase": "BEFORE_PILOT",
  "options": [
    {
      "id": "accept-the-platform-egress-address",
      "execution_effect": "ACK_CURRENT_ARTIFACT"
    },
    {
      "id": "reserve-a-public-ip-per-server",
      "execution_effect": "REGENERATE_REQUIRED"
    }
  ]
}
Reviewtemplatereview/decisions.yaml
  # DEC-NET-STACKITROUTE-NAT-FIXED-EGRESS-ADDRESS-LOST
  # NAT_FIXED_EGRESS_ADDRESS_LOST (PLAN_DECISION, status OPEN, 1 member)
  # affects: module.vpc.module.vpc.aws_route_table.private
  # options (name one in chosen_option):
  #   accept-the-platform-egress-address: the draft already carries it out: a review frees the steps that wait for it
  #   reserve-a-public-ip-per-server: changes the draft, and no answer of this build writes it: change the source (or the draft by hand) and run again; a review frees nothing
  - id: DEC-NET-STACKITROUTE-NAT-FIXED-EGRESS-ADDRESS-LOST
    resolution: ""
    # An option above that changes the draft frees no step by a review alone: its line says how the draft comes to carry it. A review that names none of the options frees nothing either.
    # chosen_option: <one of the options above>
    rationale: ""
    evidence_refs: []
    reviewed_by: Network Architect
    reviewed_at: "<YYYY-MM-DD>"
    members_sha256: sha256:cbfcbf1e12e98cb3608485caffc5de82e33e3517a0845fc9ca14cbcf7e207d0e
    artifact_sha256: sha256:37a4992d7cb1b57ebe73b1567f6fec7b6f2f3de527370a9ba50c9d2e600bccea
Planstapexecution-plan.json
{
  "id": "DEC/routing/stackitroute:module.vpc.module.vpc.aws_route_table.private:NAT_FIXED_EGRESS_ADDRESS_LOST",
  "mode": "MANUAL",
  "phase": "PREPARE",
  "capability": "decision",
  "operation": {
    "manual": {
      "owner_role": "Network Architect",
      "when": "BEFORE_PILOT",
      "success_condition": "the decision DEC-NET-STACKITROUTE-NAT-FIXED-EGRESS-ADDRESS-LOST is answered (accepted or rejected, with its evidence) in the inputs of the run and is no longer open when the run is repeated"
    }
  },
  "runs_as_written": false
}
  • Drie bestanden, één id

    Het beslissings-id DEC-NET-STACKITROUTE-NAT-FIXED-EGRESS-ADDRESS-LOST staat in alle drie, zodat een antwoord kan worden gevolgd van het register naar de review en naar de stap die erop wacht.

  • Opties zeggen wat ze veranderen

    accept-the-platform-egress-address wordt door het concept uitgevoerd zoals het er staat, dus een review maakt de stappen vrij die erop wachten. reserve-a-public-ip-per-server wijzigt het concept en vergt een nieuwe run; een review alleen maakt niets vrij.

  • Inputs en reviews zijn niet hetzelfde

    Een ontwerpantwoord gaat naar het inputbestand en genereert het concept opnieuw. Een review legt vast dat een architect heeft gekeken en een besluit heeft genomen. De volgende run leest beide; een review alleen herschrijft geen Terraform.

Waar u kijkt, in volgorde

StapBestandWat u eruit haalt
1 · Samenvattingindex.html, console.txtVolledigheid van de bron, verdeling van klassen, status van het pakket, eerste blokkade
2 · Eenhedenassessment.jsonKlasse, zekerheidsniveau, doel, reden, review per eenheid, met de bronregel
3 · Conceptterraform/De STACKIT-Terraform, met NOT CARRIED-opmerkingen per instelling
4 · Beslissingendecisions.json, review/Open vragen met opties, rol van de eigenaar en fase
5 · Planexecution-plan.json, execution/Geordende stappen, wie ze uitvoert, waarop elke stap wacht
6 · Datamigration/data-movement.mdStateful eenheden en de open datavragen
7 · Integriteitmanifest.jsonDe bestanden van de run en hun checksums voor stacktoit verify

Bestandsnamen zoals de gepubliceerde run ze schrijft.

Leesregels die discussie besparen

  • Geen enkele geautomatiseerde stap kan draaien zoals geschreven

    De Retail-run zegt dat 48 van de 57 geautomatiseerde stappen vrij zijn van beslissingen, maar dat er 0 kunnen draaien zoals geschreven, omdat ze wachten op waarden zoals project_id. Vrij van beslissingen betekent niet dat een stap klaar is om toe te passen.

  • Een standaardwaarde is geen antwoord

    Twee records berusten op een standaardwaarde van het concept: openbaar endpoint en een grootte afgeleid van de bron. Tot iemand ze bevestigt of wijzigt, zijn ze open.

  • Niet overgenomen betekent benoemd

    Elke instelling die het concept weglaat, staat met de reden in het bestand. De run meldt 404 bronattributen gecontroleerd op gegenereerde eenheden, 204 overgenomen of toegelicht en 200 niet overgenomen, zonder dat er iets onverklaard blijft.

  • Verifieer voordat u op een map vertrouwt

    stacktoit verify controleert de bestanden aan de hand van het manifest. Voor de gepubliceerde run meldt het 145 overeenkomende bestanden en 7 van 7 geslaagde controles.

  • Er wordt niets toegepast

    De run leest code en schrijft bestanden. Het maakt niets aan in een cloud.

Vragen van reviewers

Waarom zijn er geen eenheden met zekerheidsniveau HIGH in de run?

De bronprovider is niet vastgezet: het Retail-voorbeeld levert geen lockbestand mee. Het zekerheidsniveau is beperkt tot MEDIUM totdat de exacte providerversie is vastgezet.

Betekent de klasse REPLATFORM dat de overstap eenvoudig is?

Het betekent dat de workload naar een ander platformmodel verhuist. Lees de reviewpunten en de NOT CARRIED-opmerkingen om de inspanning in te schatten.

Waar zet ik mijn antwoorden?

Kopieer inputs-template.yaml en decisions-template.yaml buiten de runmap, vul de gevraagde velden in zonder hun identifiers te wijzigen en geef ze mee met --inputs en --decisions bij de volgende run.

Kan ik de Terraform vertrouwen zoals die er staat?

Het is een concept ter review. De run heeft het statisch gevalideerd, en er is geen plan uitgevoerd tegen een STACKIT-project.

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