Close

Infrastruktura jako kod

Jak Infrastruktura jako kod (IaC) zarządza złożonymi infrastrukturami

Ian Buchanan — zdjęcie
Ian Buchanan

Główny inżynier ds. rozwiązań


Infrastruktura jako kod (IaC) to proces zarządzania infrastrukturą IT, który wykorzystuje najlepsze praktyki z zakresu rozwoju oprogramowania DevOps do zarządzania zasobami chmurowymi.

Rozwój wirtualizacji sprzętu w połowie pierwszej dekady XXI wieku zaowocował nowymi możliwościami w dziedzinie hostingu infrastruktury chmurowej. Dostawcy hostingu w chmurze zaczęli oferować dostęp do dynamicznych platform według modelu infrastruktury jako usługi (IaaS). Wraz z rozwojem tych platform, które obejmowały coraz bardziej złożone rodzaje zasobów, wzrosła również złożoność tradycyjnej roli administratora systemów. Potrzeba szybkiego konfigurowania złożonych infrastruktur chmurowych i zarządzania nimi prędko stała się nowym wyzwaniem.

Pomysł infrastruktury jako kodu (IAC), czyli modelowania infrastruktury z kodem, zrodził się z sukcesu CI/CD. Metodologia DevOps okazała się bardzo wydajna, jeśli chodzi o wprowadzanie kodu do repozytorium Git, a następnie zastosowanie gałęzi funkcji i przepływów pracy żądań ściągnięcia kodu. Automatyzacja, jaką te przepływy pracy wniosły do rozwoju oprogramowania, pomogła ograniczyć złożoność zarządzania nowymi systemami chmurowymi.

Czym jest Infrastruktura jako kod?


Infrastruktura jako kod to proces zarządzania infrastrukturą IT, który wykorzystuje najlepsze praktyki z zakresu rozwoju oprogramowania DevOps do zarządzania zasobami chmurowymi. Do tych należą maszyny wirtualne, urządzenia sieciowe, moduły równoważenia obciążenia, bazy danych oraz inne aplikacje sieciowe.

IaC to forma zarządzania konfiguracją, która koduje zasoby infrastruktury przedsiębiorstwa w postaci plików tekstowych. Pliki te są następnie przekazywane do systemu kontroli wersji, takiego jak np. Git. Repozytorium kontroli wersji umożliwia zastosowanie gałęzi funkcji i przepływów pracy żądań ściągnięcia kodu, które są podstawowymi zależnościami CI/CD.

Model infrastruktury jako kodu jest możliwy dzięki upowszechnieniu się platform hostingu infrastruktury chmurowej, a konkretnie — platform IaaS. IaaS umożliwia aprowizację i zgłaszanie zapotrzebowania na zasoby chmurowe na żądanie za pośrednictwem zdalnych interfejsów API, które ustanawiają szablon dla właściwości zatwierdzonych w plikach konfiguracyjnych infrastruktury. Funkcje automatyzacyjne IaC mogą pobierać pliki konfiguracyjne i uruchamiać je na zdalnych interfejsach API IaaS.

Gdy zespół już zatwierdzi konfigurację infrastruktury do kontroli wersji, może zastosować praktyki CI/CD do zmian w infrastrukturze. Aktualizacje infrastruktury mogą przebiegać zgodnie z przepływem pracy DevOps. W przypadku dokonania przez członka zespołu edycji jednego z tekstowych plików konfiguracyjnych polecenia pull request i przepływy pracy przeglądu kodu można wykorzystać do celów audytowych i weryfikacji poprawności zmian. Ponadto system infrastruktury jako kodu z obsługą DevOps będzie wykorzystywał automatyczne wdrożenia i wycofania infrastruktury.

ikona administrator-chmura
materiały pokrewne

Infrastruktura jako usługa

ikona trzech pierścieni
POZNAJ ROZWIĄZANIE

Zarządzanie komponentami za pomocą rozwiązania Compass

Jakie jest znaczenie infrastruktury jako kodu?


Model IaC został opracowany z myślą o rozwiązaniu problemu „dryfu środowiska”. Aplikacje w chmurze zazwyczaj wykorzystują oddzielne środowiska wdrożeniowe dla poszczególnych etapów cyklu życia wydania. Powszechne jest zastosowanie środowiska programistycznego, przejściowego i produkcyjnego. Środowiska te składają się z takich zasobów sieciowych jak serwery aplikacji, moduły równoważenia obciążenia czy bazy danych. Dryf środowiska następuje, gdy infrastruktury poszczególnych środowisk nie są zsynchronizowane.

Bez IaC zarządzanie infrastrukturą bywa procesem zdezorganizowanym i trudnym. Administratorzy systemów łączą się manualnie ze zdalnymi dostawcami rozwiązań chmurowych i używają interfejsów API lub pulpitów sieciowych do aprowizacji nowego sprzętu i zasobów. Ten ręczny przepływ pracy nie zapewnia kompleksowego podejścia do infrastruktury aplikacji. Bywa, że wskutek ręcznego wprowadzenia zmian w jednym środowisku administratorzy zapominają o ich naniesieniu w drugim. W ten właśnie sposób dochodzi do dryfu środowiska.

Dryf środowiska staje się kosztowną formą marnotrawstwa. Gdy zespoły tworzą w oparciu o jedno środowisko przejściowe lub programistyczne, a po wdrożeniu stwierdzają, że środowisko produkcyjne nie zostało z tym wcześniejszym zsynchronizowane, pojawiają się błędy i awarie, co skutkuje czasochłonnym dochodzeniem na temat powodów i rozwiązań dla zaistniałej sytuacji.

Bez IaC ręczne zarządzanie infrastrukturą jest procesem powolnym. Gdy zidentyfikowana zostanie konieczność zmiany infrastruktury ze względu na dryf środowiska, gwałtowny wzrost zapotrzebowania lub inny problem, reakcja i dostosowanie się administratora systemu może zająć niewiadomą ilość czasu. To prowadzi do przerw w działaniu oraz frustracji klientów. Dzięki wdrożeniu IaC infrastruktura może się automatycznie dostosowywać do zmian w konfiguracji i reagować na skoki zapotrzebowania dzięki funkcjom automatycznego skalowania.

Infrastruktura jako kod zapewnia większy nadzór i widoczność w procesie ręcznego zarządzania systemami. Dzięki plikom konfiguracyjnym infrastruktury umieszczonym w centralnym repozytorium kontroli wersji wszyscy członkowie zespołu mogą przeglądać i edytować dane infrastruktury. Takie rozwiązanie oferuje szerokie możliwości kontroli i audytu. Jeśli na przykład Twój zespół przechodzi audyt zgodności z PCI, musisz wiedzieć, czy określona partia Twojej infrastruktury korzysta z szyfrowania SSL. Dzięki IaC możesz prędko podejrzeć konfigurację SSL i wykonać kod, aby upewnić się, że aktywna infrastruktura jest zgodna z plikami konfiguracyjnymi, co pozwala określić, czy protokół SSL jest włączony. Historia zatwierdzania kontroli wersji działa również jako dziennik umożliwiający sprawdzenie daty ich dodania czy usunięcia.

Jak działa Infrastruktura jako kod?


Obraz kodu infrastruktury

Istnieje kilka zależności, które muszą zostać wdrożone, aby możliwe było pełne osiągnięcie modelu infrastruktury jako kodu.

Hosting ze zdalnym dostępem lub platforma chmurowa IaaS

Pierwszą i najważniejszą zależnością jest zdalnie dostępny hosting. Narzędzie do zarządzania konfiguracją musi mieć możliwość nawiązania łączności ze zdalnym hostem i jego modyfikowania. Jeśli zdalna infrastruktura jest zarządzana samodzielnie, zespół musi zadbać o zapewnienie narzędziu dostępu. Chmurowa platforma hostingowa z obsługą IaaS oferuje interfejsy API, które umożliwiają użytkownikom automatyczne tworzenie, usuwanie i modyfikowanie zasobów infrastruktury na żądanie. Dostęp do tych interfejsów API można również uzyskać za pomocą narzędzi do zarządzania konfiguracją w celu dalszej automatyzacji tych zadań. Spośród popularnych platform IaaS można wymienić Digital Ocean, Amazon AWS i Microsoft Azure.

Platforma zarządzania konfiguracją

Kolejnym wymogiem do wdrożenia IaC jest pakiet narzędzi, który łączy się z interfejsami API IaaS i automatyzuje typowe zadania. Zespół może samodzielnie stworzyć zestaw skryptów i narzędzi. Może to jednak być czasochłonne, wymagać przyszłych prac konserwacyjnych i wiązać się z niskim zwrotem z inwestycji. Istnieje już wiele platform zarządzania konfiguracją open source, które rozwiązują ten problem, m.in. Terraform, Ansible, Salt Stack i Chef.

System kontroli wersji

Do określania zadań i sekwencji do wykonania przez platformę zarządzania konfiguracją służą pliki tekstowe czytelne dla człowieka i maszyn, zapisane w języku znaczników, np. YAML. Pliki te można traktować jak pliki kodu aplikacji i przechowywać w repozytorium systemu kontroli wersji. Repozytorium pełni rolę centralnego źródła informacji i umożliwia wykonywanie żądań ściągnięcia kodu oraz przeglądu kodu. Najpopularniejszym systemem kontroli wersji jest Git.

Mając określone te zależności, rozważmy przykładowy scenariusz, w którym programista chce dodać do systemu nową usługę aplikacji. Scenariusz ten pozwala zademonstrować funkcjonowanie przepływu pracy IaC.

  1. Programista edytuje plik tekstowy konfiguracji YAML na wybranej przez siebie platformie zarządzania konfiguracją — Terraform. Z edycji wynika, że potrzebny jest nowy serwer hostingowy.
  2. Programista zatwierdza zmiany w gałęzi funkcji w repozytorium Git. Jako że repozytorium Git projektu jest hostowane na Bitbucket, programista otwiera żądanie ściągnięcia kodu. Inny członek zespołu przegląda to żądanie i dowiaduje się o nowych zmianach w infrastrukturze. Wówczas zatwierdza żądanie, a programista następnie łączy commit z główną gałęzią repozytorium.
  3. Na tym etapie do wykonania aktualizacji potrzebna jest platforma konfiguracyjna. Aktualizacja może zostać wywołana ręcznie przez programistę. Ponieważ zespół korzysta z Bitbucket, ma również dostęp do Bitbucket Pipelines i może zautomatyzować ten krok za pomocą pipeline'u.
  4. Po wykonaniu Terraform nawiązuje połączenie z IaaS zespołu. Terraform wykonuje serię poleceń względem API IaaS celem uaktualnienia IaaS do oczekiwanej konfiguracji.

Podsumowując…


IaC to wysoce wydajna forma zarządzania konfiguracją, oparta na automatyzacji zarządzania infrastrukturą IT w chmurze. Po wprowadzeniu modelu IaC można go wykorzystać do osiągnięcia odpowiedniego poziomu automatyzacji CI/CD dla potrzeb zmian w infrastrukturze projektu. IaC zapewnia szeroki wgląd w komunikację i przejrzystość wokół zmian w infrastrukturze. IaC wymaga zestawu takich zależności jak platformy hostingowe czy narzędzia automatyzacji, które są powszechnie dostępne w ofercie nowoczesnych firm hostingowych.

Ian Buchanan
Ian Buchanan

Ian ma szerokie i bogate doświadczenie zarówno w Javie jak i .NET, ale najbardziej znany jest jako mistrz metodyki Agile w dużych przedsiębiorstwach. Obecnie skupia się na rozwijającej się kulturze DevOps i narzędziach umożliwiających lepszą ciągłą integrację, dostarczanie i analizę danych. W trakcie swojej kariery z powodzeniem zarządzał narzędziami do tworzenia oprogramowania dla przedsiębiorstw we wszystkich fazach ich cyklu życia. Udało mu się doprowadzić do usprawnienia procesów w całej organizacji, czego efektem jest większa produktywność, wyższa jakość i większe zadowolenie klientów. Tworzył wielonarodowe zespoły, które cenią sobie samorozwój i samodzielną organizację. Kiedy nie wygłasza prelekcji ani nie programuje, Ian oddaje się swoim pasjom związanym z parserami, metaprogramowaniem i językami dziedzinowymi. Obserwuj Iana: @devpartisan.


Udostępnij ten artykuł

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ilustracja DevOps

Społeczność rozwiązania Compass

ilustracja przedstawiająca pokonywanie przeszkód

Samouczek: Tworzenie komponentu

Ilustracja przedstawiająca mapę

Zacznij korzystać z Compass za darmo

Zapisz się do newslettera DevOps

Thank you for signing up