Wat we moeten weten over Infrastructure as Code

flare Emerging Tech & Topics

Gepubliceerd op 2023-10-14 door William Visterin

Infrastructure as Code of kortweg IaC is aan een opmars bezig binnen organisaties. We overlopen de belangrijkste zaken en trends met Dag Wieërs, die tien jaar geleden mee aan de wieg stond van de IaC-automatisatietool Ansible. Tegelijk is hij een van de Linux-pioniers in ons land.

Dit artikel verscheen oorspronkelijk in SAI Update 14, het digitaal magazine van SAI. Leden van SAI kunnen het magazine integraal lezen.

Code voor je infrastructuur: een trend is het zeker. De programmeertaal die in de GitHub-community bijvoorbeeld de meeste tractie wint, is eigenlijk helemaal geen programmeertaal in de klassieke betekenis van het woord. GitHub zag de laatste maanden en jaren namelijk een behoorlijke toename van HCL: de HashiCorp Configuration Language. Deze taal gebruik je niet zozeer om toepassingen te schrijven, maar om je infrastructuur te beschrijven. De opmars is alvast een indicatie voor het toenemend belang van Infrastructure as Code.

Wat is IaC?

Bij Infrastructure as Code laten IT operations teams automatisch hun infrastructuur provisionen, beheren en monitoren. “Meer specifiek hierbij wordt de configuratie beheerd als code en dus als tekst. Die code met alle aanpassingen zit dan centraal in een zogenaamd versioning-systeem (bijvoorbeeld Git), wat voor meer transparantie en samenwerking zorgt binnen en tussen technische teams”, klinkt het.

Naast de code en de configuratie zit ook het beslissingsproces erin vervat. “Je controleert als infrastructuurbeheerder of alles draait zoals verwacht”, stelt Wieërs. “De consequentie is dan ook dat je je infrastructuur goed moet kunnen beschrijven”, stelt hij. “Bij IaC gaat het eigenlijk om het beheer van deze meta-informatie die je infrastructuur tekstueel omvat.”

Wat is IaC (niet)?

Infrastructure as Code wordt weleens gelinkt aan andere termen, zoals (server)virtualisatie. Dat komt omdat ook virtualisatie abstractie maakt van de onderliggende infrastructuur. Al is virtualisatie nog iets anders. “Bij IaC zit alles wat je op een gestructureerde manier kunt aanspreken erin vervat, dus ook je netwerkinfrastructuur, VoIP-infrastructuur, printers of opslagsystemen, maar bijvoorbeeld ook je VMware of cloudinfrastructuur."

Wat hoort er overigens niet bij IaC? Dat zijn je data, die horen thuis in databases of op aparte datavolumes.

Het summum van IaC, volgens Wieërs, is overigens het gebruik van containers. “Een aanpassing aan je beschrijving van een infrastructuur-component leidt dan tot een nieuwe container die naadloos de oude container vervangt”, stelt hij. “Veel bedrijven zijn nog niet klaar voor een volledige omslag, want niet alle oplossingen zijn aangepast om in containers te draaien.”

Het is bovendien ook niet altijd mogelijk om bij IaC één unieke single version of the truth te gebruiken. “Vaak gaat het in een organisatie om meerdere opstellingen vanuit diverse teams. Niet alles is altijd meteen gecentraliseerd. Maar hoe verder je staat met IaC, hoe meer systemen naar elkaar convergeren en hoe groter de nood om informatie te delen.”

Wat is het verschil tussen IaC en configuration management?

Eigenlijk kun je zeggen dat configuration management een stukje van IaC is, namelijk het deel om geautomatiseerd en gefaseerd uit te rollen, stelt Wieërs. “Configuration management is een discipline die al langer bestaat, al zowat dertig jaar, en waarbij het initieel om een theoretische beschrijving van systeemconfiguraties ging. De laatste vijftien jaar is configuration management geëvolueerd op het vlak van aansturing en automatisering, waarbij IaC een vanzelfsprekende voortzetting is van deze nieuwe mogelijkheden.”

Waarom is het nu zo van tel?

Dat IaC nu aan de orde is, daar zijn verschillende redenen voor. De tools zijn enorm geëvolueerd. De leveranciers stellen hun infrastructuur- en hardwareproducten er ook voor open. “Ze boden meer mogelijkheden om hun hardware en software te beheren. Die versnelling binnen IT onder druk van klanten zorgde ervoor dat leveranciers niet konden achterblijven.” Het resultaat is dat IT operations teams hun almaar complexere en allesomvattende infrastructuur beter kunnen aansturen. “Vroeger gebeurde die automatisatie ook al, maar was men meer beperkt in de mogelijkheden. Iedereen deed zijn eigen ding met custom scripting in bijvoorbeeld Perl of shell scripts. Nu heb je standaard tools en interfaces.”

Welke code dan?

Bij Infrastructure as Code gaat het om code, diverse code. Shell scripts en Perl werden al gebruikt voor Unix en netwerkautomatisatie. Programmeertalen zoals Python en Powershell zijn vandaag eigen aan Linux- en Windows-omgevingen.

“Wat we zien, is dat de huidige automatisatietools hun eigen beschrijvende talen hebben ontwikkeld als abstractielaag, maar onderliggend terugvallen op een bekende programmeertaal.” Een voorbeeld van zo’n beschrijvende taal die dus ook aan belang wint, is HCL: de HashiCorp Configuration Language. HCL is zoals de naam suggereert een configuratietaal. HashiCorp staat aan de wieg van HCL en ontwierp ze initieel om te werken met het eigen Terraform-product. Intussen is HCL de snelst groeiende taal op Github.

Wat is de link met Agile en DevOps?

Infrastructure as Code (IaC) is in principe een essentieel deel van een Devops-strategie. “IaC laat ontwikkelaars toe met deze automatisatietools hun infrastructuuromgeving klaar te stomen voor apps of nieuwe versies daarvan. Handmatige configuratie wordt zo overbodig. In een model van continuous integration en continuous delivery, waarbij apps constant worden gebouwd en aangepast, wordt configuratie en provisionering van onderliggende infrastructuur anders een vervelende flessenhals.”

Ook op Agile heeft het een weerslag. “Agile is een aanpak die vooral van tel was voor softwareprojecten. Maar die werkwijze wordt nu dus toegepast op het proces van het beheer van infrastructuur. Zo worden software en het beheer van machines eigenlijk gelijkwaardig behandeld.”

Welke tools voor IaC?

Deze onderdelen zitten typisch in een IaC-stack:
  • Versioningsysteem (Git, GitLab, Azure DevOps, ...)
  • Configuration management tool (Puppet, Ansible, SaltStack, Terraform, ...)
  • Automation engine voor CI/CD cfr. pipelines (Jenkins, Tower, GitLab, Azure DevOps, ...)

Evolutie van configuration management

Begin jaren negentig werd er vanuit de academische wereld gezocht naar wiskundige modellen om het beheer van systemen te vereenvoudigen. “Deze eerste generatie systemen die hieruit voortvloeiden, zoals CFEngine en bcfg2, waren behoorlijk strikt in gebruik en complex om te hanteren. Deze tools hadden een beperkte maar fervente aanhang”, aldus Dag Wieërs.

Op basis van deze ideeën, ontstond rond de eeuwwisseling in de communities van opensourceontwikkelaars nieuwe toepassingen van de tweede generatie (zoals Puppet en Chef). “Die boden functioneel heel wat voordelen, maar keken vooral vanuit een ontwikkelaarsperspectief naar noden en oplossingen.”

De grote doorbraak van configuration management kwam er vanaf 2012. “Toen werd er ook vanuit de communities voor system administration gezocht naar de huidige oplossingen van de derde generatie (zoals SaltStack en Ansible), waarbij het gemakkelijk uitbreiden van de tool (door middel van Python- en Powershell-modules), maar ook het gemakkelijk uitrollen (agentless) centraal stond. Een meer cloud-geörienteerd systeem is Terraform van Hashicorp.”

Deze praktische voordelen brachten configuration management, volgens Dag Wieërs, tot waar het vandaag staat: “Een onmisbare IaC-tool voor het beheer van IT-infrastructuur.”

© SAI 2023 Alle rechten voorbehouden | Privacy | Contact | Lid Worden | Over SAI | Raad van Bestuur