ARM, BICEP czy Terraform – co wybrać? 

ARM, BICEP czy Terraform – co wybrać? 

Na blogu Hued.me pisałem ostatnio o Infrastructure as a Code (IaC). Przedstawiałem, czym charakteryzuje się to podejście do zarządzania infrastrukturą, omawiałem jego zalety oraz po krótce opisałem trzy narzędzia, które uważam za kluczowe w tworzeniu IaC: ARM, BICEP i Terraform. Dzisiaj przygotowałem ich szczegółowe porównanie oraz subiektywną ocenę. Oczywiście nie są to jedyne warte uwagi rozwiązania pozwalające na tworzenie infrastruktury w kodzie, jednak moim zdaniem stanowią one solidne podstawy umożliwiające poruszanie się w tym temacie. 

Co trzeba wiedzieć o ARM, BICEP i Terraform 

Zacznijmy od tego, że ARM i BICEP pochodzą od Microsoftu, a Terraform od HashiCorp. Nie dziwi więc, że BICEP pod wieloma względami jest formą ewolucji ARM-a. Co ciekawe, ma on także sporo wspólnego z Terraformem. Ogólnie, wszystkie trzy narzędzia mają wiele cech pochodzących z rozmaitych rozwiązań, które się przeplatają. Możemy zauważyć to np. podczas porównywania trzech różnych plików – widać wtedy jak na dłoni, że język BICEP jest hybrydą i Terraforma, i ARM-a.  

Karty przedstawiające, które narzędzia pochodzą od Microsoftu, a które od HashiCorp.

Ponadto sądzę, że BICEP to taki JSON w formie YML-a przypominający na pierwszy rzut oka C#. Dzięki takiemu porównaniu łatwiej sobie wyobrazić, z jakich funkcjonalności korzysta ten język. Nikogo nie zaskoczę, jeśli dodam, że ARM jest pisany w JSON-ie, a Terraform łudząco przypomina YML. Widać więc, że poszczególne narzędzia mocno czerpią zarówno od siebie nawzajem, jak i od zewnętrznych tworów, dzięki czemu programiści mogą łatwiej odnaleźć się w korzyściach języków z ulepszeniami od dostawcy. Najbardziej podobne są do siebie rozwiązania proponowane przez Microsoft, czego firma używa jako karty przetargowej. Twierdzą, że ci, którzy znają ARM-a, nie będą mieli żadnego problemu z przerzuceniem się na BICEP, i odwrotnie. W ten sposób zachęcają programistów do odstawienia na bok Terraforma. 

Dodatkowo, różnice w strukturze wszystkich trzech narzędzi możecie zobaczyć na moim githubie

Szczegółowe porównanie ARM, BICEP i Terraform 

Omawiane przeze mnie narzędzia z jednej strony są bardzo do siebie podobne, a z drugiej dzielące je różnice z punktu widzenia specjalisty mają ogromną wagę. Aby łatwiej było się w tym wszystkim odnaleźć, przygotowałem tabelę, w której porównuję kluczowe z mojej perspektywy aspekty poszczególnych opcji.  

 ARM BICEP TERRAFORM 
MultiCloud Nie Nie Tak 
Support Przez Microsoft Przez Microsoft Przez Microsoft 
Poziom wejścia Bardzo łatwy Łatwy Trudny 
Poziom skomplikowania przy małych projektach Mały Średni Średni++ 
Poziom skomplikowania przy dużych projektach Bardzo duży Średni Mały 
Utrzymanie kodu i czytelność Trudna Łatwa Łatwa 
Gotowy na nowości Od razu Od razu Po czasie 
Możliwość deploy poprzez portal Azure Tak Nie Nie 
Możliwość generwania kodu przez portal Tak Nie Nie 
Możliwość wizualizacji bez zewnętrznych narzędzi Tak Tak Nie 
Click and deploy  Tak Nie Nie 
Multiplaform Tak Tak Tak 
Czytelność kodu (subiektywnie) Zła Dobra Bardzo dobra 
Azure CLI Tak Tak Tak 
Dokumentacja Średnia dla nowych osób Dobra Bardzo dobra 
Domyślne zależności pomiędzy komponentami Nie Tak Tak 
CI/CD Full Full Full 
Łatwość stworzenia CI/CD Bardzo prosto Bardzo prosto Może być trudno 

Subiektywna ocena ARM, BICEP i Terraform 

Zamieszczone porównanie pozwoli każdemu z Was dopasować odpowiednie narzędzie do swoich potrzeb. Podzielę się jeszcze kilkoma spostrzeżeniami, jakie wynikają z mojego doświadczenia, a które trudno było ująć w tabeli. 

Trzy karty z logami narzędzi z tekstem "która karta pokonuje którą?"

ARM  

Nadaje się on idealnie do bardzo szybkiego rozpropagowania deploymentu na różnych subskrypcjach pomiędzy użytkowników, dlatego świetnie sprawdza się np. na warsztatach. Dzięki funkcji „Click and Deploy” korzystający mają możliwość uzyskania lustrzanej infrastruktury dzięki podejściu IaC 

BICEP  

Trochę popracowałem z tym językiem i choć wdrożenie jest rzeczywiście bardzo szybkie dla kogoś, kto znał już ARM-a, to jednak takie połączenie YML z JSON-em i C# do mnie nie przemawia. Niby próg wejścia jest znacznie niższy, ale w kontekście aplikacji, które prowadzę, sądzę, że Terraform jest dużo lepszą opcją. 

Terraform  

Terraform raczej nie sprawdzi się na warsztatach, ale już w projektach zewnętrznych lub wewnętrznych jak najbardziej. Bardzo przyjazna w odbiorze dokumentacja i możliwość tworzenia kolejnych zasobów w chmurze to jego dwie mocne zalety. Jeśli miałbym wskazać jakieś słabe strony Terraforma, to powiedziałbym, że wsparcie procesu CI/CD nie jest rozwijane przez Microsoft, więc musimy korzystać ze skryptów w Bash-u lub PowerShell-u. Co prawda istnieją gotowe taski w pipelinach dla Terraforma, ale obsługują one tylko podstawowe user-case. 

ARM, BICEP, Terraform – które narzędzie jest najlepsze?  

Talia kart z tekstem "nie losuj, wybierz świadomie"!

Podczas tworzenia Infrastructure as a Code mamy naprawdę szeroki wachlarz możliwości, jeśli chodzi o dostępne narzędzia. W tym deklaratywnym podejściu do zarządzania infrastrukturą najważniejsze jest określenie celu, do jakiego dążymy. Reszta jest zautomatyzowana i bardzo uproszczona, jednak i tak wymaga od programistów znajomości i dopasowania odpowiednich rozwiązań. Z moich doświadczeń wynika, że ARM, BICEP i Terraform są zdecydowanie godne uwagi. Rozwiązania Microsoftu polecam do zastosowania na warsztatach (choć bardziej ARM niż BICEP), natomiast Terraform sprawdzi się w innych projektach. Ale oczywiście wszystko zależy od tego, czego w danej chwili potrzebujemy. 



Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.