In de loop der jaren heeft de ontwikkeling van de cloud een grote paradigmaverschuiving gezien. Nieuwere en complexere toepassingen worden snel naar de cloud geüpload om de downtime te minimaliseren. En door dit alles is het concept van Infrastructure-as-Code en verschillende tools ontstaan om het proces van applicatieontwikkeling te vereenvoudigen.
Je vraagt je misschien af: wat is Infrastructure-as-Code? Hoe verbetert het het ontwikkelingsproces en de ervaring, en waar komt Terraform in beeld? Nou, dat zullen we allemaal verkennen in deze gids. Maar voordat we beginnen, zijn hier enkele vereisten:
-
Basiskennis van de cloud en cloudterminologieën
-
Toegang tot een pc om codevoorbeelden te implementeren
-
Een GCP-account
Met dit alles, laten we beginnen.
Dit is wat we zullen behandelen:
Overzicht van Infrastructure as Code (IaC)
Infrastructure as code verwijst naar het genereren van cloud-infrastructuurtools en applicaties met een op code gebaseerd configuratiedocument. Dit proces automatiseert de volgorde en het proces van het maken van databases, virtuele machines en servers. Dit verbetert de gebruikerservaring door de frequentie van handmatige implementaties van cloudservices te verminderen, vooral voor meerdere identieke services.
Er zijn twee verschillende benaderingen van infrastructure as code: de Imperatieve
benadering en de Declaratieve
benadering.
Bij het gebruik van de Declaratieve benadering voor het genereren van infrastructuur, beschrijft u eenvoudigweg uw verwachte/gewenste uitvoer voor de te genereren infrastructuur, waarna het IaC-hulpmiddel dat u gebruikt bepaalt hoe die uitvoer geproduceerd kan worden.
Aan de andere kant houdt de Imperatieve benadering in dat u de exacte stappen specificeert die nodig zijn om de gewenste infrastructuurstaat te bereiken. Hoewel de Imperatieve benadering meer geschikt lijkt voor complexe infrastructuuropstellingen, kan de Declaratieve benadering net zo goed werken.
Sommige tools kunnen beide benaderingen aan, terwijl andere alleen geschikt zijn voor de ene of de andere. Voorbeelden van enkele populaire IaC-tools die wereldwijd worden gebruikt zijn Terraform IaC, AWS Cloud Formation, Ansible, en Pulumi, Chef, en andere.
Zoals de naam al aangeeft – infrastructuur als code – wordt de code die de infrastructuur creëert geschreven in verschillende sjabloon talen binnen de IaC-ruimte. Populaire sjabloon talen zijn onder andere JSON, YAML, ARM-sjabloon, HCL, Heat Scripts, enzovoort.
U kunt ook scripttools gebruiken om cloud-infrastructuur uit te voeren. Enkele populaire zijn Bash en PowerShell. Deze zijn soms al geïnstalleerd op de meeste persoonlijke computers.
Van al deze tools is Terraform echter onderscheidend om verschillende redenen – en het is de tool die we in dit artikel zullen onderzoeken.
Wat is Terraform?
Terraform is een open source tool ontwikkeld door HashiCorp in 2014. Het is in de loop der jaren geëvolueerd en fungeert nu als een cloud-agnostisch infrastructuurtool dat je in staat stelt om infrastructuur te creëren over meerdere cloudserviceproviders.
Terraform biedt ook Terraform Cloud, een cloudgebaseerde software-als-een-diensttool. Het maakt cloudgebaseerde implementatie van cloudtools mogelijk, in plaats van de oude lokale methoden die we hadden in de verouderde Terraform CLI-tool.
Ook, net als andere IaC-tools die gebruikmaken van sjabloontalen, is het sjabloonkader dat wordt gebruikt om infrastructuur in Terraform te creëren de HashiCorp-sjabloontaal (HCL).
Voordelen van Terraform
Nu zal ik enkele van de voordelen van het gebruik van Terraform als cloud engineer benadrukken, samen met de sleutelrol van de tool in het cloud-ecosysteem.
1. Declaratieve Aanpak
Deze aanpak van cloudinfrastructuurautomatisering zorgt ervoor dat alle benodigde infrastructuur die moet worden geïmplementeerd (databases, servers, enzovoort) expliciet wordt vermeld en dienovereenkomstig wordt uitgevoerd. Dit helpt om conflicten te voorkomen.
2. Conflictbehandeling
Naast de efficiënte cloudtoolautomatiseringsmogelijkheden heeft Terraform enkele robuuste conflict detectie- en afhandelingseigenschappen. Een van de manieren waarop het conflicten afhandelt, is via de Terraform plan
functie. Deze functie markeert eventuele waargenomen of potentiële conflicten in de infrastructuurorchestratie, wat zorgt voor eenvoudige correctie vóór implementatie. Ik zal hier verder op ingaan in volgende secties.
3. Cloud Agnostisch
Terraform is een veelzijdige, multi-cloud automatiseringsserviceprovider met efficiënte infrastructuurautomatiseringsmogelijkheden bij de belangrijkste cloudserviceproviders (AWS, GCP en Azure). Het staat ook hybride en inter-provider automatisering toe.
4. Gebruiksvriendelijk
Terraform is een van de grootste cloudautomatiseringstools met de grootste gebruikersgemeenschappen die er zijn. Het heeft uitgebreide beginnersvriendelijke zelfstudies die je helpen snel vertrouwd te raken met de tool. Hier is een link naar de documentatie zodat je dieper kunt duiken.
5. Bestandsbeheermogelijkheden
Terraform maakt automatisch een lokale back-up van de automatiseringsstaten op je lokale computer om directe terugroep en bestandshandling te garanderen in geval van problemen. Het biedt ook externe back-upopties naar externe cloudserviceproviders indien nodig.
6. Versiebeheer
Net als het Git-versiebeheersysteem heeft Terraform een ingebouwd versiebeheersysteem waarmee je wijzigingen in een Terraform-bestand kunt bijhouden. Het stelt je ook in staat om terug te gaan naar eerdere versies van je code als er fouten zijn in de huidige versie, bijvoorbeeld.
7. Code Herbruikbaarheid
Terraform biedt een breed scala aan code-sjablonen voor gemakkelijke herbruikbaarheid op de ontwikkelaarsdocumentatiepagina.
Nu we de voordelen van Terraform hebben belicht, laten we enkele veelvoorkomende termen die in Terraform worden gebruikt en hun betekenis leren.
Veelvoorkomende termen die in Terraform worden gebruikt
Voordat je begint met het gebruik van Terraform, moet je bekend zijn met enkele belangrijke termen die vaak opduiken. Dit is wat je moet weten:
-
Providers: in Terraform is een Provider een programmeerinterface die Terraform in staat stelt om te communiceren met verschillende API’s en cloudservices. Je zou bijvoorbeeld een provider gebruiken om te communiceren met een cloudserviceprovider zoals GCP of Azure.
-
Modules: Modules zijn specifiek binnen het Terraform-framework gemaakt en fungeren als herbruikbare componenten waarmee je eenvoudig cloudservices kunt orkestreren. Je kunt ook belangrijke informatie over cloudservices in een module opslaan en deze vervolgens aanpassen om uniciteit te waarborgen met behulp van modulevariabelen.
-
Resources: Resources in Terraform verwijzen naar de cloudinfrastructuurcomponenten die moeten worden aangemaakt. Voorbeelden hiervan zijn cloudnetwerken, virtuele machines, beschikbaarheidszones en andere infrastructuren.
-
State: Het concept van state in Terraform vormt de basis voor de efficiëntie ervan. State houdt de huidige configuratie van uw infrastructuurresources bij en bevat details over elke resource die Terraform heeft aangemaakt, gewijzigd of verwijderd. Het versiebeheersysteem van Terraform gebruikt het om eventuele wijzigingen die u aanbrengt in een codebestand bij te houden en gebruikt die informatie om de infrastructuur te vernietigen en te voorzien zoals nodig.
-
Werkruimte: een werkruimte functioneert min of meer op dezelfde manier als een versiebeheersysteem, omdat het een soort beperking creëert rond een werkbestand. Werkruimtes stellen u in staat om meerdere exemplaren van een enkele infrastructuurconfiguratie op een schone en geïsoleerde manier te beheren binnen dezelfde backend. U kunt werkruimtes gebruiken om omgevingen zoals ontwikkeling, staging en productie te scheiden terwijl u dezelfde Terraform-configuratie gebruikt.
Demoproject: Hoe schrijf je een Terraform-configuratie
In dit gedeelte duiken we dieper in het schrijven van ons eerste Terraform-bestand om een virtuele machine van een Google Cloud-programma te orchestreren met slechts een paar regels code. Maar voordat we beginnen, zullen we de verschillende commando’s bespreken die u moet begrijpen voordat we het demoproject implementeren.
Veelvoorkomende Terraform-commando’s
-
Terraform init
: Dit commando initialiseert de Terraform-tool en downloadt essentiële cloud provider-specifieke bestanden. Het legt ook een verbinding tussen Terraform en de desbetreffende cloud provider. In ons geval is dat tussen GCP en de Terraform-provider. -
Terraform fmt
: Deze opdracht zorgt automatisch voor optimale code-opmaak en inspringing. Het zorgt voor een ordelijke uitvoering van de code en minimaliseert eventuele fouten. -
Terraform plan
: Deze opdracht geeft de stappen van de uitvoering van de Terraform-code weer en detecteert eventuele fouten die kunnen optreden tijdens het uitvoeringsproces. Het markeert ook eventuele fouten in de Terraform-code die de uitvoering kunnen belemmeren. Tot slot werkt het samen met Terraform state management om elke verandering van status te detecteren en indien nodig de-provisioning uit te voeren of aanvullende cloudservices te genereren. -
Terraform apply
: Deze opdracht voert de geplande Terraform-status uit die is geïmplementeerd door deTerraform plan
-opdracht. -
Terraform destroy
: Deze opdracht is de laatste opdracht in het Terraform-schema die wordt gebruikt om alle cloudservices te deactiveren of te vernietigen die zijn gemaakt met de Terraform apply-opdracht. Het is belangrijk op te merken dat je de bovenstaande opdrachten sequentieel moet uitvoeren om ervoor te zorgen dat je infrastructuur correct wordt aangemaakt.
Het maken van een IaC-aangedreven GCP virtuele machine
Nu je deze belangrijke opdrachten hebt geleerd, laten we ze allemaal testen door onze allereerste IaC-aangedreven GCP virtuele machine te maken.
In je code-editor, typ de volgende code:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
Deze code benadrukt de cloudprovider die we gebruiken om de cloudresources te genereren die we nodig hebben. In ons geval is het het Google Cloud-programma. De naam die eraan is toegewezen is gewoon “google”. Andere cloudproviders zoals AWS en Azure zijn respectievelijk “aws” en “azure”.
De tweede regel identificeert de GCP-abonnementsidentifier, die uniek is voor elk GCP-account (en helpt bij de nauwkeurige integratie). Je moet die van jou gebruiken in de daarvoor bestemde ruimte.
Je moet ook een geschikte resource-regio en resourcebeschikbaarheidszone opgeven. Dit dient als de fysieke basis voor de virtuele machine die we zullen maken zodat we deze kunnen uitvoeren. In dit scenario koos ik respectievelijk voor de regio USA centraal en beschikbaarheidszone 1-a. Je kunt hier meer over cloudregio’s en beschikbaarheidszones lezen.
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
De bovenstaande codefragment specificeert het exacte berekeningsresource dat zal worden georkestreerd, wat in ons geval een virtuele machine-instantie is gecodeerd als “vm_instance”. 'example-vm'
is de naam die we willen toewijzen aan de virtuele machine die we zullen maken voor dit project. Het is belangrijk op te merken dat de naam van de virtuele machine ook uniek moet zijn. Het type virtuele machine waar we voor kozen was de E2 (Algemeen doel)-medium type VM. Je kunt hier meer informatie vinden over typen virtuele machines hier.
Verder specificeren we ook het verwachte opgestarte besturingssysteem (“boot_disk”), wat in mijn geval een afbeelding is van het Debian Linux-besturingssysteem versie 11.
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Om de creatie van onze virtuele machine te voltooien, moeten we een virtueel netwerk opzetten om externe toegang tot de VM mogelijk te maken. Het netwerkinterfaceblok verbindt de virtuele machine met het standaard VPC (Virtual Private Cloud) netwerk dat wordt geleverd door GCP. Zonder het VPC-netwerk kunnen we geen verbinding maken met onze virtuele machine. Het uitvoeringsblok geeft ook het standaard toegang IP-adres weer in de terminal, dat we kunnen gebruiken om verbinding te maken met de virtuele machine.
Hier is de uiteindelijke verwachte code:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Vanaf daar zullen we nu deze code uitvoeren met behulp van de commando’s die worden benadrukt in de onderstaande afbeelding:
Het commando terraform -v
bevestigt dat Terraform succesvol is geïnstalleerd op de terminal. De verwachte output zal de versie van de geïnstalleerde Terraform-tool zijn.
Het volgende uitgevoerde commando is de terraform init
functie die een communicatie initialiseert met de cloud service provider, die in ons geval GCP is. Alle benodigde afhankelijkheden worden ook geïnstalleerd.
Het terraform fmt
commando wordt ook uitgevoerd om te zorgen voor een adequate code-opmaak en inspringing. Vervolgens wordt het terraform plan
commando sequentieel uitgevoerd.
Vanuit de bovenstaande afbeelding kun je zien welke stappen Terraform van plan is te gebruiken om de verwachte virtuele machine te genereren.
Bij succesvolle uitvoering van Terraform plan zullen we dan de terraform apply
functie uitvoeren om de stappen uitgezet door Terraform plan uit te voeren.
Dit zal een prompt genereren die vraagt om een bevestiging van de Terraform-uitvoering zoals hierboven weergegeven. Door “Ja” in te typen, kan de operatie soepel worden voortgezet.
Bij succesvolle uitvoering wordt een succesbericht weergegeven zoals hierboven weergegeven. Hiermee hebben we onze Cloud-infrastructuur gecreëerd met slechts code. Het terraform destroy
commando kan vervolgens worden uitgevoerd om de aangemaakte virtuele machines te verwijderen.
Conclusie
In dit artikel heb je de basisbeginselen geleerd over infrastructuur als code. We hebben Terraform besproken, de voordelen ervan, en enkele van zijn belangrijkste kenmerken en commando’s. We hebben ook laten zien hoe het gebruikt kan worden in een demo-project.
Om je kennis verder te vergroten, kun je de documentatie van Terraform raadplegen voor meer codevoorbeelden. Ik raad ook aan om je zojuist opgedane kennis te gebruiken om een project met praktische toepassingen te automatiseren.
Voel je vrij om me een bericht te sturen met opmerkingen of vragen. Je kunt ook mijn andere artikelen hier bekijken. Tot de volgende keer, blijf coderen!
Source:
https://www.freecodecamp.org/news/a-beginners-guide-to-terraform-infrastructure-as-code-in-practice/