Stoisz przed wyborem: AWS CloudFormation czy Terraform? Ten artykuł rozwieje Twoje wątpliwości i pomoże Ci podjąć najlepszą decyzję.
Cloud computing zrewolucjonizował świat DevOps. Nie jest to już tylko modny frazes, ale rzeczywistość, która trwale zmienia sposób, w jaki rozwijamy i utrzymujemy nasze aplikacje. Chociaż zalety chmury obliczeniowej są niezliczone i dotyczą firm każdej wielkości, istnieje pewne ograniczenie: konieczność ręcznego konfigurowania infrastruktury.
Tradycyjnie, trzeba logować się do konsol dostawców usług chmurowych i krok po kroku definiować swoje potrzeby. W niewielkich projektach to rozwiązanie działa, ale co, gdy nad konfiguracją pracuje wiele osób? Możesz szybko skończyć z chaotyczną, trudną w zarządzaniu infrastrukturą. Brak efektywnej współpracy i śledzenia zmian to poważne problemy. Na szczęście, istnieje na to sposób: infrastruktura jako kod (IaC).
Infrastruktura jako kod to popularne pojęcie w świecie cloud computingu. Polega na zarządzaniu infrastrukturą IT za pomocą kodu. Tak, to prawda. Zamiast klikać w konsoli, tworzysz pliki konfiguracyjne, które automatycznie uruchamiają infrastrukturę w chmurze. IaC gwarantuje spójność konfiguracji, ułatwia i przyspiesza utrzymanie, a także minimalizuje ryzyko błędu ludzkiego.
Wykorzystanie IaC w Amazon Web Services
AWS jest liderem na rynku usług chmurowych, z udziałem rynkowym dwukrotnie większym niż kolejny konkurent. Platforma AWS oferuje ponad 200 usług, które znajdują zastosowanie w różnorodnych scenariuszach.
Rozpoczynając przygodę z IaC w AWS, najczęściej wybór zawęża się do AWS CloudFormation oraz narzędzia open-source, Terraform. Podjęcie decyzji, które z tych narzędzi jest lepsze, może być trudne ze względu na mnogość funkcji. W tym artykule przeanalizujemy różnice między AWS CloudFormation i Terraform, aby ułatwić Ci wybór najbardziej odpowiedniego rozwiązania.
Terraform vs. AWS CloudFormation: kluczowe różnice
Modułowość
W przypadku dużych organizacji modułowość odgrywa istotną rolę przy wyborze narzędzia IaC.
CloudFormation
CloudFormation nie oferuje natywnego wsparcia dla modułów. Zamiast tego, wykorzystuje tzw. zagnieżdżone stosy jako substytut modułów.
Załóżmy, że chcesz ustandaryzować sposób tworzenia zasobników S3 w organizacji. Tworzysz szablon CloudFormation, który definiuje konfigurację zasobnika S3. Następnie, gdy użytkownik chce utworzyć taki zasobnik, używa tego szablonu jako zagnieżdżonego stosu.
Mniej znana usługa AWS, Katalog Usług AWS również może pomóc w modularyzacji CloudFormation. Ta usługa została stworzona z myślą o organizacjach, które chcą ograniczyć zakres usług AWS w celu zachowania zgodności, bezpieczeństwa, kontroli kosztów i wydajności. Co ciekawe, Katalog Usług wykorzystuje szablony CloudFormation jako swoje zaplecze.
Rozważmy to na przykładzie. Niewłaściwe użycie zasobników S3 może prowadzić do poważnych problemów z bezpieczeństwem danych. W takim przypadku, chcesz ustandaryzować proces ich tworzenia. Masz dwie opcje: utworzyć zagnieżdżony szablon stosu, który będzie używany w innych stosach CloudFormation, lub skorzystać z Katalogu Usług AWS.
Katalog Usług pozwala na wykorzystanie tego standardowego szablonu za pomocą interfejsu użytkownika konsoli i pozwala na wprowadzanie niewielkich modyfikacji parametrów. W ten sposób masz większą kontrolę nad tworzoną infrastrukturą i unikasz niepożądanych scenariuszy.
Terraform
Terraform ma wbudowaną obsługę modułów. Możesz tworzyć standardowe konfiguracje, podobnie jak w CloudFormation, i używać ich w innych konfiguracjach Terraform.
Jako narzędzie open-source, Terraform oferuje dostęp do wielu gotowych modułów w Rejestrze Terraform. Możesz również tworzyć własne moduły i hostować je w prywatnym rejestrze.
Osobiście, jeśli modułowość jest kluczowa, preferowałbym Terraform nad CloudFormation. Korzystanie z zagnieżdżonych stosów w CloudFormation nie jest tak intuicyjne jak używanie modułów w Terraform, szczególnie w kontekście przekazywania danych między szablonami.
Ponadto, nie ma standardowego repozytorium do udostępniania szablonów CloudFormation. Chociaż Katalog Usług AWS pozwala na wymuszanie pewnych zasad tworzenia infrastruktury za pomocą konsoli, to nadal wymaga przejścia przez manualny proces określania parametrów. Z drugiej strony, Terraform oferuje ustandaryzowaną metodę tworzenia, utrzymywania i udostępniania modułów, a ich wymagania są jasno określone w Rejestrze modułów Terraform.
Kontrola i zarządzanie infrastrukturą
Jeśli chcesz ograniczyć zasoby, które Twoi użytkownicy mogą tworzyć na kontach AWS, zarówno CloudFormation, jak i Terraform oferują odpowiednie mechanizmy kontrolne.
CloudFormation nie zapewnia bezpośredniej kontroli nad sposobem użycia szablonów, ale dzięki zasadom AWS IAM możesz ograniczyć użytkownikom możliwość tworzenia zasobów tylko za pomocą standardowych szablonów CloudFormation. W naszym przykładzie z zasobnikiem S3, możesz ograniczyć uprawnienia „Tworzenie S3” i pozwolić na tworzenie tylko za pomocą Katalogu Usług AWS lub zagnieżdżonych stosów.
Terraform oferuje kontrolę nad tworzonymi zasobami za pomocą zasad jako kodu, wykorzystując narzędzie Sentinel. Sentinel umożliwia tworzenie szczegółowych zasad opartych na logice, które pozwalają lub odmawiają użytkownikom wykonywania akcji w Terraform. Na przykład, możesz zablokować bezpośrednie tworzenie zasobników S3 i zezwolić na nie tylko z modułu standardowego.
Zarządzanie stanem
Zarówno CloudFormation, jak i Terraform muszą śledzić zasoby, którymi zarządzają.
Terraform przechowuje stan infrastruktury w pliku stanu. Domyślnie jest on zapisywany lokalnie, ale można go przechowywać na zdalnych backendach, takich jak S3, co umożliwia pracę wielu użytkownikom na tym samym zestawie infrastruktury.
CloudFormation nie korzysta z pliku stanu, który jest widoczny dla użytkownika. Jako usługa zarządzana, dba o kontrolę stanu i wszystkie powiązane operacje w tle.
Oba narzędzia umożliwiają sprawdzenie, jakie zmiany zostaną wprowadzone w infrastrukturze. W Terraform używasz polecenia „terraform plan”, aby zobaczyć planowane zmiany. W CloudFormation informacje te są dostępne za pośrednictwem Zestawów zmian.
Język
Terraform wykorzystuje język konfiguracji HashiCorp, HCL, stworzony przez HashiCorp. Jest on podobny do JSON z dodatkowymi funkcjami i możliwościami.
Szablony CloudFormation są tworzone w formacie YAML lub JSON.
Logowanie i wycofywanie zmian
Zarówno CloudFormation, jak i Terraform mają dobrze rozwinięte mechanizmy logowania. Z mojego doświadczenia wynika, że diagnozowanie błędów i problemów jest zazwyczaj proste.
CloudFormation: W przypadku niepowodzenia aktualizacji stosu, CloudFormation automatycznie wycofuje wszystkie zmiany. Jest to przydatna funkcja, którą można tymczasowo wyłączyć w celach diagnostycznych.
Terraform: Terraform nie wycofuje automatycznie zmian w przypadku niepowodzenia. Nie jest to jednak problem, ponieważ zawsze możesz użyć polecenia „terraform destroy” aby usunąć częściowo utworzoną infrastrukturę i ponownie uruchomić Terraform.
Zakres
Terraform nie ogranicza się tylko do chmury AWS. Kluczowym argumentem przemawiającym za wyborem Terraform jest obsługa wielu dostawców chmurowych i usług.
Jeśli planujesz wykorzystywać IaC w wielu chmurach, Terraform będzie najlepszym rozwiązaniem. CloudFormation, mimo swojej potęgi, jest ograniczony tylko do AWS. Terraform pozwala na zarządzanie infrastrukturą i wdrażanie aplikacji na wielu platformach chmurowych, co zwiększa dostępność i niezawodność aplikacji.
Wsparcie dla nowych funkcji
Zwykle, kiedy AWS wprowadza nowe usługi i funkcje, aktualizacja CloudFormation pojawia się szybciej niż w Terraform, ponieważ jest to usługa AWS. Obecnie oba narzędzia oferują wsparcie dla większości usług i ich funkcji. Może to być pewna niedogodność w przypadku korzystania z Terraform, ale istnieje sposób na obejście tego problemu.
Istnieje możliwość utworzenia stosu CloudFormation w kodzie Terraform. Jeśli korzystasz z Terraform i brakuje Ci jakiejś funkcji, możesz tymczasowo skonfigurować stos CloudFormation w kodzie Terraform.
Wsparcie techniczne
Płatny plan wsparcia technicznego AWS obejmuje również wsparcie dla CloudFormation.
HashiCorp również oferuje płatne wsparcie techniczne dla Terraform.
Podsumowanie
Zarówno AWS CloudFormation, jak i Terraform to potężne i w pełni funkcjonalne narzędzia. Przedstawione różnice pomogą Ci podjąć świadomą decyzję, która będzie najlepiej dopasowana do Twoich potrzeb. Moja sugestia jest taka, że jeśli planujesz korzystać z wielu platform chmurowych w przyszłości lub już to robisz, powinieneś użyć Terraform jako uniwersalnego rozwiązania dla wszystkich potrzeb. Jeśli natomiast szukasz narzędzia IaC tylko dla AWS, zarówno CloudFormation, jak i Terraform są dobrym wyborem.
Jeśli jesteś zainteresowany nauką Terraform, sprawdź dostępne kursy online.