De enscenering ontstond door op vrijdagavond in het Hetzner-paneel te klikken. Zes maanden later weet niemand waarom de firewall openbare poort 6379 toestaat. De productie vindt plaats in Terraform – behalve de S3-bucket die ‘tijdelijk’ met de hand is toegevoegd. Resultaat: twee waarheden, een ‘terraformplan’ dat wil vernietigen wat het team nog gebruikt.
Terraform belooft reproduceerbaarheid. Dit geldt alleen als de status, modules en governance hetzelfde niveau van vereisten volgen als de applicatiecode.
Aanbieders, middelen en wat we modelleren
Europese providers (Hetzner hcloud, OVH, Scaleway, OpenStack) stellen servers, volumes, privénetwerken, DNS, load balancers beschikbaar. Modelleer wat vaak verandert en wat nodig is om traceerbaar te zijn:
| Bron | Interesse Terraform | Val |
|---|---|---|
| Server/instantie | Grootte, afbeelding, regio gecodeerd | levenscyclus negeer_veranderingen maskerdrift |
| Firewall / beveiligingsgroep | Regels met versiebeheer | Handmatige regel buiten TF |
| DNS | Uitlijning geïmplementeerd | TTL en propagatie vergeten |
| Objectopslag | Emmers, levenscyclus | IAM-sleutels buiten versleutelde status |
Als het niet in de staat is, is het niet reproduceerbaar – het is een schuld.
Staat op afstand, slot en geheimen
Externe backend (S3 + slot, GitLab HTTP-backend, Terraform Cloud):
- Vergrendel tijdens toepassing — er zijn geen twee gelijktijdige toepassingen.
- Back-up van de staat — deze bevat soms gevoelige gegevens.
- Codering in rust; minimale toegang.
Nooit terraform.tfstate in het ongewisse plegen. Gebruik gevoelige variabelen (TF_VAR_, kluis CI) voor host-API-tokens.
Modules: DROOG zonder black box
Herbruikbare modules (vpc + subnet + bastion) versnellen, maar een ondoorzichtige allesomvattende module ontmoedigt het opnieuw afspelen. Maak expliciete variabelen zichtbaar (instance_type, enable_ipv6, backup_window).
Versiemodules met Git-tags (?ref=v1.2.0) — niet zwevend main. Als team terraform fmt en validate in CI voordat u plannen maakt voor MR.
Beleid plannen, toepassen en wijzigen
Gezonde workflow: MR → terraformplan becommentarieerd in CI; menselijke beoordeling van vernietigen en vervangen; automatisch of handmatig toepassen, afhankelijk van de kriticiteit.
prevent_destroy op DB-prod. -target gereserveerd voor gedocumenteerde noodsituaties – anderszins inconsistente toestand.
Geleidelijke import van oude hulpbronnen: één hulpbron tegelijk, een groen plan voor de volgende.
Multi-cloud en Europese hosts
Vermijd standaard multi-cloud: een goed gecontroleerde provider verslaat drie halfbakken configuraties. Voor EU-residentie stelt u de regio in en controleert u de bijbehorende bronnen (momentopnameregio, replica).
Kruisverwijzing met AVG-subcontracten: Terraform garandeert geen jurisdictie – u kiest de regio in de code.
De top: infra als code zonder governance = vermomde clickops
Reproduceerbaar betekent: elke ingenieur kan de enscenering helemaal opnieuw creëren - niet alleen dat het .tf-bestand bestaat.
Beslis en ga vooruit zonder blinde vlek
Configureer een externe backend en vergrendel de toegang. Integreer 'terraform plan' in CI bij elk samenvoegverzoek. Versiemodules met Git-tags. Plan de import van verouderde bronnen één voor één. Scheid status per omgeving – nooit staging en prod in hetzelfde statusbestand.
Vergelijk aanbieders via de overzicht en de vergelijker. Laatste test: vernietig en reconstrueer de enscenering van git - duur en verrassingen gedocumenteerd.
Veelgestelde vragen
Waarom de Terraform-status op afstand opslaan?
De lokale status op een laptop verhindert teamwerk en gaat verloren bij een schijfcrash. Een externe backend vergrendelt gelijktijdige applicaties en registreert wijzigingen.
Vervangt Terraform Ansible?
Nee – Terraform verzorgt de infrastructuur (servers, netwerk, DNS, buckets); Ansible of cloud-init configureert het besturingssysteem en de services. De twee vullen elkaar aan.
Hoe vermijd je drift?
Regulier CI-plan, verbod op handmatige wijzigingen die niet in de code worden vermeld, en gedocumenteerde import voor oudere bronnen.
Is er één werkruimte vereist per omgeving?
Ja – gescheiden staatsopvoering en productie. Nooit dezelfde status voor twee kritieke omgevingen.
Handige Terraform kan worden gelezen in een plan dat door een mens wordt beoordeeld – niet in een aanvraag die zonder getuige vanaf een laptop wordt gelanceerd.
