Het handmatig inrichten en beheren van infrastructuur kan een complex en foutgevoelig proces zijn. Gelukkig zijn tools als Terraform naar voren gekomen om infrastructuurbeheer te stroomlijnen met behulp van infrastructuur als code (IaC).
Om het volledige potentieel van Terraform te benutten, is het echter van cruciaal belang om de staat Terraform te begrijpen. Deze staat speelt een cruciale rol bij het garanderen van consistente infrastructuurconfiguraties en maakt effectieve samenwerking tussen teams mogelijk.
In dit artikel wordt onderzocht wat de staat Terraform is, wat het belang ervan is en hoe de staatsbestanden effectief kunnen worden beheerd en gemanipuleerd.
Wat is de staat Terraform?
Terraform state is een cruciaal onderdeel van de functionaliteit van Terraform. Het fungeert als een permanent dossier van de infrastructuur die u beheert met behulp van Terraform, in wezen een kaart tussen de bronnen die zijn gedefinieerd in uw configuratiebestanden (.tf) en hun echte tegenhangers.
Hoe Terraform State werkt
Terraform slaat de statusinformatie op in een bestand, meestal terraform.tfstate genoemd. Dit bestand wordt automatisch bijgewerkt wanneer u de opdracht terraform apply uitvoert. Hier is een overzicht van het proces:
- Huidige status vastleggen: Tijdens de toepassing van terraform leest Terraform de infrastructuur en legt de huidige staat vast, inclusief resource-attributen en configuraties.
- Vergelijk staten: Terraform vergelijkt deze vastgelegde toestand met de gewenste toestand die in uw Terraform-configuratiebestanden is gedefinieerd.
- Wijzigingen identificeren: Terraform identificeert discrepanties tussen de gewenste en huidige status op basis van de vergelijking in de vorige stap.
- Updates toepassen: Als er verschillen zijn, past Terraform de nodige updates toe om de infrastructuur op één lijn te brengen met uw gedefinieerde configuratie.
Voordelen en belang van het gebruik van Terraform State
Het handhaven van een consistente en nauwkeurige Terraform-staat is essentieel voor het garanderen van betrouwbaar infrastructuurbeheer. Dit is de reden:
- Verminderde configuratiedrift: Na verloop van tijd kunnen infrastructuurconfiguraties afwijken van hun beoogde toestand als gevolg van handmatige wijzigingen of externe factoren. Een up-to-date Terraform-staat fungeert als één enkele bron van waarheid, die de werkelijke configuratie van uw infrastructuur weerspiegelt.
- Betrouwbare planning en uitvoering: Terraform vertrouwt op het staatsbestand om infrastructuurwijzigingen te plannen en toe te passen. Een nauwkeurige staat zorgt ervoor dat Terraform een duidelijk beeld heeft van uw bestaande infrastructuur. Dit stelt het in staat om betrouwbaardere uitvoeringsplannen te genereren en fouten te voorkomen tijdens de toepassing van wijzigingen.
- Teamsamenwerking: Terraform State faciliteert samenwerking aan infrastructuurprojecten. Door het staatsbestand op een centrale locatie op te slaan, zoals een backend op afstand zoals HashiCorp Cloud Terraform Registry of een cloudopslagservice, kunnen meerdere teamleden tegelijkertijd aan dezelfde infrastructuurconfiguratie werken, waardoor gecentraliseerd infrastructuurbeheer wordt bevorderd.
- Schaalbaarheid voor grote infrastructuren: Naarmate uw infrastructuur in complexiteit toeneemt, kan het lokaal beheren van de staat Terraform omslachtig worden. Door de status op te slaan in een remote backend kunt u Terraform effectiever schalen. Remote backends bieden functies zoals versiebeheer en toegangscontrole, waardoor het gemakkelijker is om de status te beheren voor grote en geografisch gedistribueerde infrastructuren.
- Verbeterde resource tracking: Terraform State houdt een gedetailleerd overzicht bij van alle provisioned resources en hun configuraties. Dit uitgebreide logboek maakt het aanzienlijk gemakkelijker om uw infrastructuur te beheren en bij te werken. Stelt u zich eens voor hoe moeilijk het zou zijn om handmatig honderden resources en hun configuraties te volgen. Terraform State elimineert deze last door een centrale opslagplaats te bieden voor alle infrastructuurdetails.
- Efficiënte veranderingsdetectie: Met Terraform State kan Terraform op intelligente wijze veranderingen in uw infrastructuur detecteren. Wanneer u terraform apply uitvoert, vergelijkt het de gewenste status met de opgenomen status en past het alleen updates toe op de resources die daadwerkelijk zijn gewijzigd. Dit bespaart u tijd en voorkomt onnodige wijzigingen aan uw infrastructuur.
- Gestroomlijnd afhankelijkheidsmanagement: Terraform State houdt de afhankelijkheden tussen resources bij. Dit is cruciaal omdat de volgorde waarin resources worden gecreëerd of bijgewerkt soms van belang kan zijn. Een webserver kan bijvoorbeeld afhankelijk zijn van een database die als eerste wordt aangemaakt. Terraform state zorgt ervoor dat updates in de juiste volgorde worden toegepast door deze afhankelijkheden in overweging te nemen.
Terraform State beheren
Terraform biedt flexibiliteit bij het opslaan van statusbestanden. U kunt kiezen tussen lokale opslag op de machine van de ontwikkelaar of gebruik maken van externe backends voor samenwerking en schaalbaarheid.
- Lokale backend: De lokale backend is de standaardoptie en vereist geen extra configuratie. Het statusbestand wordt opgeslagen op het lokale bestandssysteem, meestal terraform.tfstate genoemd in de werkmap. Deze aanpak is gunstig voor het gebruiksgemak en is geschikt voor kleine, persoonlijke projecten of individuele ontwikkeling. Het is echter niet ideaal voor samenwerking of grote infrastructuren.
- Backend op afstand: Remote backends slaan het statusbestand op een gecentraliseerde locatie op, vaak een cloudopslagdienst zoals Amazon S3, Google Cloud Storage of Azure Blob Storage. Met Remote Backend kunnen meerdere teamleden tegelijkertijd toegang krijgen tot de infrastructuurconfiguratie en deze wijzigen. Dit is zeer geschikt voor grote en geografisch gedistribueerde infrastructuren en biedt functies zoals versiebeheer en disaster recovery.
Terraform State configureren
De specifieke configuratiestappen variëren afhankelijk van de gekozen externe backendprovider. Hier is een voorbeeld van het configureren van Terraform om AWS S3 te gebruiken als een backend op afstand:
# Configure Terraform to use S3 as the remote backend
terraform {
backend "s3" {
bucket = "my-terraform-state" # Name of the S3 bucket to store the state file
key = "path/to/my/statefile" # Path within the bucket to store the state file
region = "us-west-2" # AWS region where the S3 bucket is located
}
}
Best practices voor het organiseren en versieren van State Files
Overweeg de volgende best practices om gemakkelijk te beheren statusbestanden bij te houden:
- Segmentatie: Het verdelen van statusbestanden door omgeving (bijv. ontwikkeling, staging, productie) of project helpt de organisatie in stand te houden en voorkomt conflicten bij het werken aan meerdere omgevingen of projecten. Overweeg bijvoorbeeld afzonderlijke staatsbestanden genaamd terraform.tfstate.dev en terraform.tfstate.prod voor ontwikkelings- en productieomgevingen.
- Versiebeheer met versiebesturingssystemen (VCS): Met versiebeheersystemen zoals Git kunt u wijzigingen in uw statusbestanden in de loop van de tijd volgen. Dit maakt het mogelijk om terug te draaien naar eerdere configuraties indien nodig en vergemakkelijkt de samenwerking door een auditspoor van wijzigingen te bieden.
- Encryptie: Het versleutelen van statusbestanden, vooral bij het gebruik van externe backends, beschermt gevoelige informatie zoals toegangssleutels of wachtwoorden in geval van onbevoegde toegang. De meeste aanbieders van cloudopslag bieden server-side encryptie voor data at rest. U kunt ook encryptietools aan clientzijde verkennen om het statusbestand te versleutelen voordat u het uploadt naar de externe backend.
Het manipuleren van de staat Terraform
Terraform biedt krachtige commando's voor interactie met de staat Terraform. Met deze commando's kunt u bestaande infrastructuur beheren, uw staatsbestand reorganiseren voor betere onderhoudbaarheid en resources uit de controle van Terraform verwijderen.
Hieronder volgen enkele veelgebruikte Terraform-statuscommando's:
- terraform import: Dit commando is van cruciaal belang voor de integratie van bestaande infrastructuurelementen (resources) onder het beheer van Terraform. Het vertelt Terraform om een fysieke bron te herkennen en te volgen die al bestaat in uw cloudomgeving. Dit kan nuttig zijn voor het migreren van bestaande infrastructuur naar Terraform of het beheren van resources die in eerste instantie buiten Terraform zijn gecreëerd.
- terraforme staat: Deze kernopdracht biedt een verscheidenheid aan subopdrachten voor het manipuleren van uw statusbestand. Enkele van deze zijn:
- terraforme statuslijst: Geeft een overzicht van alle bronnen die in het huidige statusbestand worden bijgehouden. Dit is nuttig om een overzicht te krijgen van de middelen die Terraform beheert.
- terraforme statuslijst: Geeft een overzicht van alle bronnen die in het huidige statusbestand worden bijgehouden. Dit is nuttig om een overzicht te krijgen van de middelen die Terraform beheert.
- terraforme statuslijst: Geeft een overzicht van alle bronnen die in het huidige statusbestand worden bijgehouden. Dit is nuttig om een overzicht te krijgen van de middelen die Terraform beheert.
- terraform state show: <resource_name> Geeft gedetailleerde informatie weer over een specifieke bron die is opgeslagen in het statusbestand, inclusief de kenmerken en configuratie ervan.
- terraform state rm <resource_name>: Verwijdert een resource uit het statusbestand. Dit vernietigt de werkelijke infrastructuurresource in de cloud niet; het verwijdert deze alleen uit het management van Terraform.
Veelvoorkomende scenario's voor staatsmanipulatie
Hieronder volgen enkele praktische scenario's waarin u uw Terraform-status moet manipuleren en enkele voorbeeldcommando's om het te helpen bereiken:
- Bestaande resources toevoegen: Gebruik terraform import om bestaande infrastructuurresources onder controle van Terraform te brengen. Dit is vooral nuttig bij het migreren van bestaande infrastructuur naar Terraform of het beheren van middelen die in eerste instantie buiten Terraform worden geleverd. De volgende opdracht importeert bijvoorbeeld een bestaande AWS EC2-instantie met de ID i-1234567890abcdef0 in Terraform en wijst het voorbeeld van de logische naam toe:
terraform import aws_instance.example i-1234567890abcdef0
- Verplaatsing van resources: Gebruik terraform state mv om uw state file te reorganiseren voor een betere onderhoudbaarheid. Dit kan nuttig zijn wanneer u gerelateerde bronnen binnen modules wilt groeperen of gewoon de algemene structuur van uw staatsbestand wilt verbeteren. De volgende opdracht verplaatst bijvoorbeeld de aws_instance. Voorbeeldresource naar een nieuwe module met de naam new_module:
terraform state mv aws_instance.example
module.new_module.aws_instance.example
Bronnen verwijderen: Gebruik terraform state rm om resources uit het management van Terraform te verwijderen zonder de werkelijke resources in de cloud te vernietigen. Dit is nuttig voor situaties waarin u wilt stoppen met het beheer van een resource met Terraform, maar de resource zelf in de cloudomgeving wilt behouden.
Conclusie
Terraform State is een fundamenteel onderdeel van de infrastructuurbeheermogelijkheden van Terraform. Door de staat Terraform te begrijpen en effectief te beheren, kunt u zorgen voor een consistente, betrouwbare en schaalbare infrastructuur. Of u nu lokale backends of backends op afstand gebruikt, Portworx® van Pure Storage biedt de beste persistente opslagoplossing voor uw container workloadsmet Kubernetes. Door dit te gebruiken met uw Terraform-configuraties, kunt u uw data altijd opslaan, ongeacht de wijzigingen in uw Terraform-statusbestanden.