Infrastructure as Code – szybkość, automatyzacja i przewaga, którą musisz mieć.
Niejednokrotnie menadżerowie z działów IT zastanawiają się co mogą zrobić bardziej efektywnie w obszarze infrastruktury. Szukają rozwiązań oraz panaceum na codzienne problemy związane z dostarczaniem szeroko pojętej infrastruktury. Projekty nie mogą tygodniami oczekiwać na nowe serwery, zarządzanie podatnościami nie może powodować przestojów dla klientów, a sama współpraca pomiędzy zespołami musi odbywać się w atmosferze wzajemnego zrozumienia i otwartości.
Infrastruture as Code czy też popularny IaC powstał w odpowiedzi na wciąż rosnące potrzeby rynku a sama metoda wdrażania oraz korzyści z niej płynące została zaadaptowana zarówno przez programistów, jak i administratorów IT. Od teraz współpraca pomiędzy obszarami IT staje się coraz większa, tworząc synergię produkcyjną tak niezbędną w każdej organizacji.
Czym jest IaC?
Zacznijmy zatem od tego czym jest Infrastructure as Code. IaC to metoda zwiększająca szybkość wdrożenia, ograniczająca koszty oraz zmniejszająca ryzyko błędów, które związane są z dostarczaniem kompletnych rozwiązań w organizacji. Na świecie bardzo spopularyzowana przez podejście DevOps, które zaadoptowało ją jako podstawowy sposób efektywnego i nowoczesnego podejścia do zarządzania infrastrukturą.
Dla nas to jedna z kluczowych metodyk oraz praktyk, traktowania infrastruktury w sposób jaki programiści od lat traktują kod aplikacji. Wykorzystując dojrzałe i sprawdzone praktyki dostarczania oprogramowania oraz zestaw dedykowanych narzędzi otrzymujemy możliwość uruchomienia gotowej do użycia infrastruktury wraz z przygotowaną aplikacją w czasie, jaki w standardowym modelu pracy byłby nieosiągalny. Przy tym zachowujemy także niezbędną stabilność oraz bezpieczeństwo. Dzięki temu zyskujemy rozwiązanie najwyższej jakości.
Kolejną kluczową rzeczą jest kontrola kosztów. Posiadając scentralizowany punkt, w którym widać, jak wygląda całe środowisko IT naszej firmy można w prosty sposób oszacować koszty infrastruktury i dostosowywać je do bieżących potrzeb, unikając płacenia za usługi, których nie potrzebujemy. Scentralizowana i automatyczna konfiguracja całego środowiska zawsze pokaże nam dokładnie za co płacimy.
Jak wygląda IaC?
No dobrze, ale jak wygląda IaC? Czy mogę wdrożyć go w mojej organizacji? Czego potrzebuję? Podobne pytania mogą bardzo często pojawiać ze względu na natłok rozwiązań i narzędzi, które oferują wdrożenie IaC.
Przekształcenie infrastruktury w model IaC nie wiąże się z „wywróceniem” do góry wszystkiego co obecnie posiadamy. Jest raczej wykorzystaniem tego, co już mamy, czyli repozytorium kodu oraz narzędziem CI/CD, wzbogaconym o dodatkową konfigurację realizowaną przez narzędzia IaC, których zadaniem jest doprowadzenie do otrzymania efektu, który nas zadowoli.
Infrastruktura w modelu IaC podlega tym samym rygorom co wytwarzanie oprogramowania. Cała jej konfiguracja znajduje się w repozytorium kodu (np. Git, GitLab, Bitbucket etc) i jest automatycznie testowana pod kątem bezpieczeństwa oraz stabilności z użyciem narzędzi CI/CD (Jenkins, Bamboo, Gitlab CI/CD etc). A co najważniejsze – jest reużywalna i konfigurowalna deklaratywnie.
W standardowym modelu procesu provisioningu infrastruktury i jej późniejszej konfiguracji spotykamy się z mieszanką pracy manualnej oraz automatyzacji za pomocą skryptów, które czasami są umieszczane w repozytorium kodu dla szerszego zespołu IT. Jednak zazwyczaj nie podlegają one przeglądom czy testom. Są także pisane jednorazowo i nie podlegają aktualizacji, co już samo w sobie jest furtką do wystąpienia serii problemów. W rezultacie otrzymujemy proces mało stabilny, oparty na manualnych akcjach, co skutkuje otrzymaniem nowego środowiska, które nie jest powtarzalne. Nie jesteśmy także w stanie sprawdzić, czy jest ono stabilne oraz bezpieczne.
Alternatywą jest skorzystanie z dobrodziejstw IaC. Warto także zaznaczyć, że nie tyczy się ono wyłącznie środowiska chmurowego, lecz także środowisk on-premises.
Zastosowanie IaC’a w praktyce
Jednym z przykładów konfiguracji infrastruktury on-premises jest stworzenie playbooków Ansible’a czy cookbooków Chef’a, które będą odpowiadały za skonfigurowanie maszyn wirtualnych powołując do życia serwery bazodanowe, aplikacyjne itp., diametralnie skracając czas ich tworzenia, a kod infrastrukturalny będzie można reużywać, aktualizować i dostosowywać wedle potrzeb.
W przypadku chmury pojawia się jeszcze warstwa provisioningu, w której stosujemy takie narzędzia jak Terraform, CloudFormation, Pulumi czy CDK. Dzięki takiemu skonstruowaniu procesu otrzymujemy infrastrukturę dostosowaną do naszych potrzeb, którą możemy odtwarzać na wielu środowiskach z zachowaniem pewności, że została ona przetestowana i spełnia nasze oczekiwania.
W efekcie uruchamiamy dokładnie to czego chcemy, a cała konfiguracja środowiska jest dostępna w jednym miejscu.
Wykorzystanie takiego podejście znacząco ułatwia późniejszą modyfikację, tworzenie nowych środowisk czy poszukiwanie błędów.
Jednak powołanie nowej infrastruktury to nie koniec. IaC to rozwiązanie kompleksowe, oferujące współpracę połączonych ze sobą elementów, dlatego kolejnym krokiem jest poprawne skonfigurowanie aplikacji, co wykonuje się z wykorzystaniem pipelinów CI/CD. Wszystkie te kroki są w pełni zautomatyzowane tworzące wydajne, bezpieczne i efektywne środowisko w Twojej organizacji, środowisko otwarte i gotowe na nieustanny postęp technologiczny świata IT.
Autor: Paweł Imiełowski