UITROL · CI/CD EN IAC
CI/CD en uitrol van infrastructure-as-code op STACKIT
Rol de gemigreerde infrastructuur uit vanuit een pipeline, niet vanaf een laptop: beoordeel met een strikte gate, bewaar het gegenereerde pakket als buildartefact, authenticeer de STACKIT-provider met een kortlevend OIDC-token in plaats van een opgeslagen sleutel, zet de state in een backend die u beschermt en pas alleen een planbestand toe dat iemand heeft beoordeeld. Deze gids volgt een kleine AWS-omgeving door die keten en markeert welke onderdelen uit een StackToIT-run komen en welke uit de documentatie van de STACKIT-provider.
De uitrolketen, in volgorde
1. Beoordelen in de pipeline
Voer het assessment uit met --strict en --format json. Het rapport wordt ook geschreven als de gate faalt, dus de job bewaart de uitvoermap als artefact en legt de exitcode ernaast vast.
2. De map verifiëren
stacktoit verify controleert de run aan de hand van het manifest en controleert of de gegenereerde bestanden met elkaar overeenkomen. Het is geen bewijs dat er iets in een cloud is uitgevoerd, en geen handtekening.
3. De open verzoeken beantwoorden in bestanden
De run schrijft inputs-template.yaml en decisions-template.yaml in zijn uitvoermap. Kopieer ze buiten de gegenereerde map, vul ze in, commit ze en voer opnieuw uit met --inputs en --decisions. Een vastgelegde review alleen herschrijft het concept niet.
4. Het beoordeelde concept committen
De terraform-map zet de provider vast op één versie en vereist Terraform of OpenTofu 1.11 of hoger. Behandel het concept als voorstel: het gaat door een gewone pull request.
5. Authenticeren zonder opgeslagen sleutel
Maak een serviceaccount aan, koppel een gefedereerde identity provider voor uw CI-systeem en laat de provider het OIDC-token van de pipeline inwisselen. Houd de assertions zo smal als het token toestaat.
6. De state kiezen en beschermen
Het concept declareert geen backend. Een S3-backend op Object Storage werkt met overgeslagen AWS-specifieke controles, maar locking werkt niet; en de state bevat enkele secrets in leesbare tekst.
7. Plannen, beoordelen, het planbestand toepassen
Voer init, validate en plan -out uit als afzonderlijke stappen, laat een persoon het plan lezen en pas dan exact dat bestand toe.
8. Na elke wijziging opnieuw uitvoeren
Nieuwe inputs of beslissingen wijzigen het concept en het uitvoeringsplan. Beoordeel opnieuw en bekijk het nieuwe plan in plaats van het oude te patchen.
De gate, zoals de run die meldt
Een omgeving van vijf resources voor deze pagina, op 4 november 2026 beoordeeld door StackToIT met --strict en --format json, met --no-validate, dus de OpenTofu-validatie is overgeslagen. Eerst: de twee commando's die de StackToIT-automatiseringsdocumentatie voor een gate geeft, elk letterlijk uit zijn eigen codeblok. Daarna: het verificatie-event en het samenvattingsrecord dat de run afdrukte, opgemaakt, met alleen de hier besproken velden (de records bevatten meer, zoals run-id, bestandslijst en aantallen stappen).
stacktoit assess ./terraform --strict --format json > assessment-events.jsonlstacktoit verify ./terraform-stacktoit --output json{
"type": "event",
"event_code": "RUN_VERIFIED",
"phase": "publish",
"severity": "INFO",
"human_summary": "The package passed the checks of stacktoit verify (7 checks, PASSED) before it was published; the record is in run_verification of manifest.json."
}
{
"type": "summary",
"exit_code": 7,
"exit_reasons": [
{
"code": 7,
"reason": "PACKAGE_NOT_EXECUTION_READY",
"detail": "package PARTIALLY_EXECUTABLE"
}
],
"run_status": "COMPLETE",
"package": "FULL",
"verification": "PASSED",
"summary": {
"package_state": "PARTIALLY_EXECUTABLE",
"architect_approval": "NOT_PROVIDED",
"safe_to_apply": "NOT_ASSERTED"
}
}Exit 7 is de strikte gate die werkt
Het pakket was compleet en geverifieerd, maar de exitcode is 7 met als reden dat het pakket niet gereed is voor uitvoering: het is gedeeltelijk uitvoerbaar. Van de 12 geautomatiseerde stappen wacht er één op een ontwerpbeslissing (het bootimage) en geen enkele kan draaien zoals geschreven zolang project_id geen waarde heeft. Een eerste assessment faalt normaal gesproken op een strikte gate; daar is de gate voor.
Code en artefact samen behandelen
De documentatie vraagt de automatisering om de exitcode vast te leggen en de gegenereerde bestanden te bewaren waar ze bestaan. Andere codes: 3 betekent dat de validatie de bron of het concept afwees, 4 een onvolledige bron, 5 een vergrendelde uitvoermap, 6 een mislukte verificatie.
Goedkeuring blijft een veld voor mensen
De samenvatting toont goedkeuring van de architect als niet opgegeven en safe-to-apply als niet vastgesteld. Een pipeline vult die niet in; een persoon doet dat, via het beslissingsbestand.
Wat het concept aan de pipeline overdraagt
Dezelfde run. Links: terraform/terraform.tf, dat de STACKIT-provider vastzet. Rechts: de commando's die execution/terraform/apply.md noemt. De run past niets toe; het bestand zegt dat niets in deze map is uitgevoerd.
terraform {
# Write-only attributes (e.g. a VPN pre-shared key) need Terraform/OpenTofu 1.11 or later.
required_version = ">= 1.11.0"
required_providers {
stackit = {
source = "stackitcloud/stackit"
version = "0.121.0"
}
}
}
provider "stackit" {
default_region = var.region
}cd terraform
tofu init
tofu validate
tofu plan -out=stackit.tfplan
tofu apply stackit.tfplanEén providerversie
Het concept zet de provider vast op één versie, zodat elke pipelinerun plant tegen hetzelfde schema. Verhoog de vastgezette versie bewust, in een pull request.
Variabelen zonder standaardwaarde blijven open
Het project-ID, het image, het machinetype en de grootte van het bootvolume hebben geen standaardwaarde. Lever ze aan via een variabelenbestand of TF_VAR-omgevingsvariabelen, nooit in een gecommit bestand als ze gevoelig zijn.
Handmatige stappen en een apply in twee runs
apply.md opent met "Do not apply yet": één OpenTofu-stap wacht op een beslissing. Het bestand heeft een onderdeel voor handmatige stappen die klaar moeten zijn vóór tofu apply (geen in deze run), omdat OpenTofu het hele concept in één keer toepast en ze niet afdwingt. Hier splitst het bestand de apply in twee runs: eerst de twee security groups, dan twee STACKIT API-aanroepen die standaard egress-regels verwijderen, dan de rest.
Authenticatie met workload identity federation
Letterlijk uit de Workload Identity Federation-gids van de STACKIT-provider, niet door een run voortgebracht. Links: de gefedereerde identity provider die de gids op het serviceaccount voor zijn eigen repository configureert (vervang repository en branch in sub door die van u). Rechts: de plan- en apply-stappen van het GitHub Actions-voorbeeld; de job heeft ook de permissie id-token: write nodig.
- **Provider Name**: GitHub # This is just an example, you can choose any name you want
- **Issuer URL**: https://token.actions.githubusercontent.com # This is the public issuer for GitHub Actions OIDC tokens
- **Assertions**:
- **sub**->equals->repo:stackitcloud/terraform-provider-stackit:ref:refs/heads/main # This is the repository and branch where the action will run
- **aud**->equals->sts.accounts.stackit.cloud # Mandatory value - name: Terraform Plan
run: |
terraform plan -out=tfplan
env:
STACKIT_USE_OIDC: "1"
STACKIT_SERVICE_ACCOUNT_EMAIL: "terraform-example@sa.stackit.cloud"
- name: Terraform Apply
run: terraform apply -auto-approve tfplan
env:
STACKIT_USE_OIDC: "1"
STACKIT_SERVICE_ACCOUNT_EMAIL: "terraform-example@sa.stackit.cloud"Geen statisch secret
De provider documenteert deze flow als de manier die langlevende secrets in CI/CD overbodig maakt. De provider zoekt de OIDC-instelling in het providerblok, dan in omgevingsvariabelen en dan in een bestand met inloggegevens. Het voorbeeld van de gids draait Terraform en past toe met -auto-approve in dezelfde job; het pakket van de run gebruikt tofu, en deze pagina heeft de flow niet onder OpenTofu gecontroleerd. Zet de planreview tussen de twee stappen.
De audience is verplicht
De STACKIT-documentatie vereist een assertion op de audience; alleen de gelijkheidsoperator wordt ondersteund en een token wordt alleen geaccepteerd als elke assertion klopt. De gids adviseert de meest beperkende beschikbare assertions.
Andere CI-systemen
De gids behandelt GitHub Actions en Azure DevOps en zegt dat de principes ook kunnen gelden voor andere CI/CD-platforms die OIDC ondersteunen.
Fasen, instellingen en gates
| Fase | Commando of instelling | Gate en wat u bewaart |
|---|---|---|
| Beoordelen | stacktoit assess ./terraform --strict --format json | Exit 0 is een gepubliceerd rapport; 7 is een strikte fout. Bewaar de uitvoermap in beide gevallen. |
| Verifiëren | stacktoit verify RUN_DIR | Exit 0 slaagt, 6 meldt bevindingen. Vergelijk twee runs met --same-as. |
| Inputs beoordelen | --inputs- en --decisions-bestanden in versiebeheer | Reviews die aan een andere bron zijn gekoppeld, kunnen als verouderd worden gemeld. |
| Authenticeren | STACKIT_USE_OIDC en STACKIT_SERVICE_ACCOUNT_EMAIL | De sleutelflow blijft beschikbaar via STACKIT_SERVICE_ACCOUNT_KEY_PATH. |
| State | S3-backend op Object Storage, of een PostgreSQL-backend | use_lockfile heeft geen effect op STACKIT Object Storage: laat één apply-job tegelijk draaien. |
| Plannen en toepassen | tofu plan -out, daarna tofu apply op het planbestand | Bewaar het plan; een persoon keurt goed vóór de apply. |
De run heeft locking op geen enkele backend getest en zegt dat. De state bevat ook de geheime toegangssleutel van Object Storage in leesbare tekst, dus de state is zelf een secret.
Beslissingen van de architect
Wie het plan goedkeurt
Een reviewer van het eigenaarsteam, met het planbestand bij de wijziging. De run legt goedkeuring vast als niet opgegeven tot een persoon antwoordt.
Locatie en versleuteling van de state
De run adviseert de state te versleutelen en het leesrecht te beperken tot de pipeline, en verwijst naar OpenTofu state encryption of een versleutelde backend.
Eén job tegelijk
Zonder werkende locks serialiseert u applies in de pipelineconfiguratie.
Rechten van het serviceaccount
Het serviceaccount heeft de rollen nodig van de diensten die het concept gebruikt; het requirements-bestand noemt geen rol, dus zoek per dienst het minimum op.
Strikte of adviserende gate
Bepaal of exit 7 de merge blokkeert of alleen labelt. Gangbare praktijk: adviserend voor een eerste assessment, strikt voor de applyfase.
Vragen over de uitrol
Past StackToIT iets toe vanuit de pipeline?
Nee. Assess leest en schrijft bestanden. Terraform of OpenTofu past toe, gestart door uw pipeline of een persoon.
Waarom faalt mijn strikte gate op een schoon assessment?
Omdat de strikte modus gedeeltelijke en niet-geverifieerde uitkomsten tot fouten maakt. Een pakket dat gedeeltelijk uitvoerbaar is, met beslissingen die openstaan, geeft exit 7 terwijl rapport en verificatie in orde zijn.
Kan ik state op Object Storage vergrendelen?
Niet met het lockbestand van de S3-backend: de providerdocumentatie meldt dat het geen effect heeft op STACKIT Object Storage en verwijst voor locking naar een PostgreSQL-backend.
Moet de pipeline een serviceaccountsleutel bevatten?
Geef de voorkeur aan workload identity federation. De sleutelflow bestaat, vereist een sleutelbestand van het serviceaccount, en die sleutel is een langlevend secret.
Waar komen secrets in de state vandaan?
De vastgezette provider schrijft sommige attributen, zoals de geheime toegangssleutel van een Object Storage-credential, in de state. sensitive verbergt ze alleen in de uitvoer van het plan.
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
Hartelijk dank.
Uw verzoek is bij ons binnengekomen. Onze specialisten nemen contact met u op.