Un mod mai bun de a face lucrurile – Infrastructure as Code

Infrastructure as Code (IaC) reprezinta procesul de a crea si gestiona infrastructura prin cod in loc de a folosi procesele manuale. IaC foloseste fisiere de configuratie care contin specificatiile infrastructurii necesare pentru dezvoltarea sau rularea unei aplicatii: servere, sisteme de operare, stocare, retelistica, ridicand aceasta sarcina de pe umerii dezvoltatorilor si castigand timp semnificativ pentru alte faze ale aplicatiei.

In mod uzual pentru a ajunge intr-o stare de IaC se folosesc unelte de automatizare a serverelor si de management a configuratiilor:

  • Chef
  • Puppet
  • Ansible
  • Saltstack
  • Terraform
  • AWS CloudFormation

Toate exemplele de mai sus sunt asemanatoare, avand cateva diferente in modul in care descriu datele din fisierele de configuratii (JSON, YAML), denumirea fisierului de configuratie (manifest, playbook, cookbook) si limbajul de programare folosit (ruby, python). Diferentele mai mari sunt in modul in care putem ajunge la IaC:

  • Imperativ
  • Declarativ

Abordarea imperativa specifica modul exact in care trebuie sa arata infrastructura, pasii care trebuie urmati si ordinea in care acesti pasi sa fie executati.

Abordarea declarativa defineste starea dorita a sistemului, resursele necesare si ce proprietati trebuie sa aiba acestea, apoi tool-ul de IaC se va ocupa de aceste aspecte.

De exemplu, daca avem nevoie sa cream 10 servere virtuale putem face acest lucru prin ambele abordari, evident😊 Diferenta apare daca avem nevoie sa schimbam starea sistemului,  daca mai avem nevoie, sa zicem, de inca 5 servere. Abordarea imperativa va necesita un alt fisier de configuratie care sa specifice 5 instante, modificarea celui existent din 10 in 15, va duce la crearea a 15 servere noi, in loc de 5 cate sunt necesare! Abordarea declarativa poate folosi acelasi template modificat din 10 in 15 pentru numarul de instante. La executarea fisierului de configuratie, tool-ul de IaC evalueaza starea actuala a sistemului si starea in care acesta trebuie sa ajunga, creand suplimentar cele 5 instante virtuale necesare.

Uneltele de IaC enumerate mai sus pot functiona adesea cu ambele abordari, insa tendinta este de a se folosi modul declarativ pentru ca fisierele de configuratie sunt refolosibile, si numarul necesar de fisiere pentru a descrie/modifica o infrastructura ramane relativ mic, de vreme ce descriem doar starea in care vrem sa ajungem.

Setarea infrastructurii a fost dintotdeauna un proces costisitor financiar si consumator de timp. Managementul infrastructurii nu se mai face pe echipamente hardware fizice si s-a mutat pe virtualizare, cloud computing si containere. In cloud, numar de componente ale unei infrastructuri a crescut semnificativ fata de o infrastructura on-premises si aplicatiile sunt date in productie cu o cadenta mult mai mare fata de era „ante-cloud”. Infrastructura trebuie sa fie creata, scalata si „distrusa” frecvent. Fara IaC, ar fi mult mai greu pentru echipa de DevOps sa faca aceste task-uri.

IaC ajuta organizatiile in gestionarea infrastructurii IT, aducand la masa avantaje precum:

  • Reducerea costurilor operationale
  • Marirea vitezei de dezvoltare a aplicatiilor
  • Reducerea erorilor de configuratie
  • Consistenta si omogenitate pentru infrastructura aplicatiei in toate etapele de dezvoltare a acesteia – build, testing, production
  • Versionare pentru un mai bun control asupra fisierelor de configuratie

IaC este un element important pentru implementarea practicilor DevOps si CI/CD. Developerii pot rula un simplu script care sa le creeze infrastructura de care au nevoie, nemaiasteptand dupa si nemaidepinzand de un sysadmin care sa faca toata munca manual in cine stie cat timp. IaC ofera consistenta procesului de dezvoltare a aplicatiilor, creand aceeasi infrastructura de fiecare data cand este folosit. Astfel, echipele de dezvoltare si de testare a aplicatiilor vor folosi aceeasi infrastructura, ceea ce va reduce numarul de erori, deployment-uri manuale si incosistente.

Avand solutia de automatizare potrivita, organizatia poate sa lanseze aplicatii si servicii noi mai repede, sa gestioneze infrastructura IT mai eficient si sa observe o crestere a productivitatii in procesul de dezvoltare a aplicatiilor.

Mihai Dumitrascu, Sr Systems Engineer