Terraform, ontwikkeld door HashiCorp, is een veelgebruikte Infrastructure-as-Code (IaC)-tool waarmee gebruikers software-infrastructuur kunnen definiëren en leveren met behulp van een configuratietaal op hoog niveau. Naarmate organisaties steeds meer gebruikmaken van cloudgebaseerde infrastructuren, is Terraform essentieel geworden voor het beheer en de automatisering van de implementatie van infrastructuurresources. Een van de kerncommando's in Terraform is terraform plan, een cruciale stap in het implementatieproces dat ervoor zorgt dat veranderingen in de infrastructuur veilig, voorspelbaar en efficiënt zijn.
In dit artikel bekijken we dit commando, wat het doet en hoe u de output voor uw Terraform-configuraties kunt interpreteren.
Wat is Terraform Plan?
Het commando terraform plan is een essentieel onderdeel van de Terraform-workflow die dient als een dry run of preview van de wijzigingen die Terraform in uw infrastructuur zal aanbrengen. Het vergelijkt de huidige staat van uw infrastructuur met de gewenste staat die is gedefinieerd in uw Terraform-configuratiebestanden en toont de specifieke acties die Terraform zal ondernemen om de kloof te overbruggen. Dit omvat toevoegingen, verwijderingen en wijzigingen van resources, zoals het creëren van nieuwe virtuele machines, het opschalen van bestaande databases of het verwijderen van ongebruikte opslagvolumes.
Voordelen van Terraform Plan
De mogelijkheid om vooraf te bekijken welke wijziging uw configuratiecode voor uw infrastructuur veroorzaakt, is op veel manieren gunstig, waaronder:
- Transparantie: Het Terraform-plan biedt een gedetailleerd overzicht van de aankomende wijzigingen en geeft een duidelijk beeld van wat er in uw infrastructuur wordt gecreëerd, gewijzigd of verwijderd. Deze transparantie helpt fouten te minimaliseren en zorgt ervoor dat iedereen die betrokken is bij het implementatieproces op één lijn zit.
- Risicobeperking: Door vooraf de wijzigingen te bekijken, kunnen gebruikers potentiële problemen identificeren en aanpakken voordat ze de diensten verstoren. Terraform-plan kan helpen bij het ontdekken van resourceconflicten (bijv. het creëren van een VM met een dubbele naam), het missen van afhankelijkheden (bijv. een database waarvoor een specifieke beveiligingsgroep nodig is die niet is geconfigureerd) of onbedoelde wijzigingen als gevolg van typefouten in configuratiebestanden.
- Samenwerking: Terraform-plan integreert naadloos met versiebeheersystemen zoals Git, waardoor teamsamenwerking wordt vereenvoudigd. Het delen van de planoutput met teamleden maakt het mogelijk om wijzigingen te beoordelen binnen de context van codeverplichtingen, waardoor transparantie en verantwoordelijkheid worden bevorderd voordat wijzigingen worden geïmplementeerd.
- Efficiëntie: Terraform-plan helpt gebruikers bij het methodisch plannen en uitvoeren van infrastructuurwijzigingen. Door het plan te analyseren kunt u potentiële knelpunten of inefficiënties identificeren voordat u de wijzigingen aanbrengt.
- Veiligheid: Het Terraform-plan fungeert als een vangnet door u in staat te stellen wijzigingen te controleren en te valideren voordat ze op uw productie-infrastructuur worden toegepast. Deze beveiliging helpt onbedoelde wijzigingen te voorkomen en zorgt voor de stabiliteit en betrouwbaarheid van uw cloudomgeving.
Terraform Plan uitvoeren
Om een terraform plan uit te voeren, moet u eerst zorgen dat Terraform op uw lokale machine is geïnstalleerd. U kunt de juiste versie downloaden en installeren van de officiële HashiCorp-website .
Voordat u het plancommando uitvoert, moet u in uw werkmap een basisconfiguratiebestand van Terraform met de naam main.tf maken. Hieronder volgt een voorbeeld van een eenvoudige configuratie die een virtuele machineresource creëert in een cloudprovider:
# Configure the cloud provider (replace with your provider details)
provider "aws" {
region = "us-east-1"
}
# Define a virtual machine resource
resource "aws_instance" "my_vm" {
ami = "ami-0f78f7e824d9499e0" # Replace with the desired AMI ID
instance_type = "t2.micro"
}
1. De Terraform-directory initialiseren
Navigeer naar uw werkmap met het main.tf-bestand en voer de volgende opdracht uit op uw terminal:
$ terraform init
Deze opdracht initialiseert de Terraform-directory, downloadt alle vereiste plug-ins of modules die in uw configuratie worden genoemd en bereidt de omgeving voor op het werken met Terraform.
2. Terraform-plan uitvoeren
Zodra de initialisatie is voltooid, voert u de volgende opdracht uit om het uitvoeringsplan te genereren:
$ terraform plan
Deze opdracht analyseert uw Terraform-configuratie en vergelijkt deze met de huidige staat van uw infrastructuur (indien van toepassing). Vervolgens wordt een gedetailleerd plan weergegeven met de acties die Terraform zal ondernemen om de gewenste status te bereiken die in uw configuratie is gedefinieerd. Het plan toont doorgaans de resources die worden gecreëerd, gewijzigd of verwijderd
3. Sla de planoutput op
Als u het plan wilt opslaan voor toekomstig gebruik of het wilt delen met teamleden, kunt u optioneel de -out-vlag gebruiken met het plancommando. De volgende opdracht slaat bijvoorbeeld het plan op in een bestand met de naam plan.tfplan:
$ terraform plan -out=plan.tfplan
De opdracht terraform plan geeft alleen een voorbeeld van de wijzigingen. Het brengt geen wijzigingen aan in uw infrastructuur. Nadat u het plan hebt bekeken en goedgekeurd, kunt u de opdracht $ terraform apply gebruiken om de geplande wijzigingen uit te voeren.
Inzicht in en analyse van de output van het Terraform Plan
De output van het terraforme plan is doorgaans onderverdeeld in verschillende secties, die elk waardevolle inzichten bieden in de geplande acties:
Resource-acties
In dit gedeelte worden de specifieke acties vermeld die Terraform van plan is uit te voeren op uw infrastructuurresources. Deze acties zijn onderverdeeld in drie hoofdtypen:
- Maken (+): Dit symbool geeft aan dat Terraform nieuwe resources zal creëren op basis van uw configuratie.
- Lezen (~): Dit symbool geeft aan dat Terraform de staat van de bestaande bronnen zal lezen om te bepalen of er wijzigingen nodig zijn. Dit symbool komt minder vaak voor in de planoutput, omdat Terraform doorgaans de vereiste acties tijdens de planningsfase bepaalt.
- Verwijderen (-): Dit symbool geeft aan dat Terraform bestaande resources zal verwijderen die niet langer in uw configuratie zijn gedefinieerd.
Informatie over resources
Deze sectie biedt diepgaande informatie over elke resource die door het plan wordt beïnvloed. Hier is een overzicht van de details die u normaal gesproken kunt vinden:
- Brontype: Dit specificeert het type infrastructuurresource dat Terraform beheert (bijv. aws_instance, azurerm_resource_group).
- Naam resource: Dit identificeert de unieke naam die is toegewezen aan de resource binnen uw Terraform-configuratie.
Geplande wijzigingen
In dit gedeelte worden de specifieke wijzigingen beschreven die op de resource zullen worden toegepast. Voor resources die worden gecreëerd (aangeduid door +), worden de attributen en de bijbehorende waarden vermeld die zullen worden gedefinieerd. Voor resources die worden gewijzigd, toont het de wijzigingen in bestaande attributen.
Samenvatting
De planoutput wordt vaak afgesloten met een samenvattingssectie die een overzicht op hoog niveau biedt van de geplande acties. Deze samenvatting verdeelt doorgaans het totale aantal resources in de volgende categorieën:
Toe te voegen: Het aantal nieuwe resources dat zal worden gecreëerd
Te wijzigen: Het aantal bestaande resources dat zal worden gewijzigd
Te vernietigen: Het aantal bestaande resources dat zal worden verwijderd
Wanneer u een terraform plan uitvoert met de voorbeeldconfiguratie die we eerder hebben gemaakt, krijgt u resultaten die vergelijkbaar zijn met het volgende:
# $ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.my_vm will be created
resource "aws_instance" "my_vm" {
+ ami = "ami-0f78f7e824d9499e0"
+ instance_type = "t2.micro"
+ tags = {
+ Name = "sample-tag"
}
}
1. Resource-acties: De eerste regel geeft aan dat Terraform tijdens dit plan creatieacties (+) zal uitvoeren.
2. Informatie over resources: In de volgende sectie wordt ingegaan op de details van één enkele resource, aws_instance.my_vm . Dit betekent dat Terraform in uw AWS-omgeving een nieuwe AWS EC2-instantie zal maken met de naam my_vm. De details specificeren verder de AMI ID (ami-0f78f7e824d9499e0), het instantietype (t2.micro ) en een tag (Naam = "sample-tag ") die Terraform op de nieuwe instantie zal toepassen.
3. Samenvatting (impliciet): Hoewel dit voorbeeld niet expliciet wordt getoond, kan een samenvatting worden weergegeven aan het einde van een complexere planuitvoer, met vermelding van het totale aantal resources dat moet worden aangemaakt.
Best practices voor het gebruik van Terraform Plan
Het commando terraform plan is uw vangnet voordat u infrastructuurwijzigingen aanbrengt. Hieronder volgen enkele essentiële praktijken om de voordelen ervan te maximaliseren:
Bekijk wijzigingen in resources:
- Focus op resources die gemarkeerd zijn voor creatie (+) of verwijdering (-).
- Controleer of de attribuutwaarden voor nieuwe resources overeenkomen met uw intentie (bijv. AMI ID, opslaggrootte).
- Controleer wijzigingen in bestaande resources op nauwkeurigheid.
Spot potentiële problemen:
- Zoek naar resourceconflicten (bijv. dubbele namen, ontbrekende afhankelijkheden).
- Zorg ervoor dat alle vereiste afhankelijkheden (bijv. beveiligingsgroepen) zijn gedefinieerd.
- Wees voorzichtig met onverwachte verwijderingen van resources die de diensten kunnen verstoren.
De output benutten:
- Valideer of de geplande wijzigingen overeenkomen met uw infrastructuurdoelstellingen.
- Houd rekening met mogelijke kostenimplicaties in verband met resourcewijzigingen. U kunt ook de planoutput delen voor teambeoordeling en communicatie.
Conclusie
Het Terraform-plan is een krachtige tool in de Terraform-workflow. Het biedt een veilige en transparante methode om infrastructuurwijzigingen te bekijken en te valideren voordat ze worden toegepast. Door het Terraform-plan te begrijpen en effectief te gebruiken, kunt u ervoor zorgen dat uw implementaties efficiënt, voorspelbaar en vrij van onbedoelde gevolgen zijn.
Pure Storage biedt de beste persistente block storage-oplossingen voor uw Terraform-implementaties. Portworx® biedt een uitgebreid dataplatform voor al uw container- en Kubernetes Terraform-workloads. Met Pure Cloud Block Store™ kunt u elke database- of containerworkload in de cloud uitvoeren, net zoals u kunt doen op on-prem infrastructuur