Zrozumienie narzędzi IaC: Cloudformation vs Terraform

AWS CloudFormation i Terraform – nie wiesz, co wybrać? Ten artykuł pomoże Ci podjąć mądrą decyzję.

Cloud Computing zrewolucjonizował świat DevOps. To już nie tylko modne hasło; jest tutaj i jest tutaj, aby zmienić sposób, w jaki rozwijamy i utrzymujemy nasze aplikacje. Chociaż istnieje niezliczona ilość powodów, dla których warto korzystać z chmury obliczeniowej we wszystkich skalach firm, istnieje niewielkie ograniczenie, ale musisz ręcznie aprowizować swoją infrastrukturę.

Musisz podejść do konsol dostawców chmury i powiedzieć im dokładnie, czego chcesz. Działa to dobrze w małych przypadkach użycia, ale co, jeśli masz różne osoby wprowadzające zmiany w konfiguracji w konsoli. Możesz skończyć z bardzo skomplikowaną infrastrukturą, która będzie coraz trudniejsza w utrzymaniu. Nie ma wydajnego sposobu na współpracę lub śledzenie zmian w infrastrukturze w chmurze. Cóż, właściwie jest. Infrastruktura jako kod.

Infrastruktura jako kod to bardzo popularne określenie w chmurze obliczeniowej. Jest to proces zarządzania infrastrukturą IT za pomocą kodu. Tak to prawda. Zamiast iść do konsoli i robić wszystko ręcznie; Infrastruktura jako kod, czyli IAAC lub IAC, umożliwia pisanie plików konfiguracyjnych, które następnie udostępniają infrastrukturę chmury. IAC daje nam takie korzyści, jak spójność, łatwa i szybka konserwacja oraz brak miejsca na błędy ludzkie.

Używanie IAC z Amazon Web Services

AWS to wiodąca usługa przetwarzania w chmurze na świecie, mająca dwukrotnie większy udział w rynku niż kolejny dostawca chmury po nim. W AWS istnieje ponad 200 usług, które mogą obsłużyć setki i tysiące przypadków użycia.

Rozpoczynając korzystanie z IAC z AWS, często zawężasz swoje wybory do Tworzenie chmury AWS oraz narzędzie open-source, Terraforma. Próbując dokonać wyboru między nimi, zrozumienie mnogości funkcji oferowanych przez oba narzędzia może być dość przytłaczające. W tym artykule przyjrzymy się różnicom między AWS CloudFormation i Terraform, aby pomóc Ci zdecydować, które narzędzie jest lepiej dopasowane do Twoich potrzeb.

Terraform vs. AWS CloudFormation: różnice

Modułowość

Podczas korzystania z IAC w dużych organizacjach modułowość może być ważnym czynnikiem przy wyborze odpowiedniego narzędzia.

Tworzenie chmury

CloudFormation nie ma natywnej obsługi modułów. Pozwala na użycie czegoś, co nazywa się zagnieżdżonymi stosami jako modułami.

Na przykład możesz mieć standardową konfigurację sposobu aprowizacji zasobnika S3 w swojej organizacji. Tworzysz więc standardowy szablon CloudFormation, który tworzy zasobniki S3. Teraz, gdy użytkownik końcowy chce utworzyć zasobnik S3, może użyć tego szablonu CloudFormation jako stosu zagnieżdżonego i utworzyć standardowy zasobnik S3.

Istnieje również mniej znana usługa AWS, Katalog usług AWS które mogą pomóc Ci w modułowości Twojego AWS CloudFormation. Katalog Usług to usługa AWS zaprojektowana specjalnie dla organizacji, które chcą ograniczyć zakres Usług AWS w celu spełnienia wymagań dotyczących zgodności, bezpieczeństwa, kosztów lub wydajności. I zgadnij co? AWS Service Catalog wykorzystuje szablony CloudFormation w backendzie.

Zrozummy to szybko na przykładzie. Zasobniki S3, jeśli nie są prawidłowo używane, mogą wkrótce mieć katastrofalne skutki dla Twoich poufnych danych. Weźmy ten sam przykład, chcesz mieć standardowy sposób korzystania z S3 w swojej organizacji. Pierwszą opcją jest utworzenie zagnieżdżonego szablonu stosu, który może być używany w innych stosach CloudFormation i jest równie dobry.

Jeśli nie chcesz, aby użytkownicy musieli używać tego standardowego szablonu jako stosu zagnieżdżonego, możesz użyć katalogu usług AWS. Katalog usług umożliwi użytkownikom korzystanie z tego standardowego szablonu z interfejsu użytkownika konsoli i określanie niektórych parametrów w celu niewielkich dostosowań. Umożliwi to kontrolowanie sposobu, w jaki infrastruktura jest udostępniana na Twoich kontach AWS i zapobiegnie wszelkim niechcianym scenariuszom.

Terraforma

Terraform ma natywną obsługę modułów. Pozwala tworzyć standardowe konfiguracje, podobnie jak AWS CloudFormation i używać ich w innych konfiguracjach terraformowych.

Ponieważ Terraform jest narzędziem o otwartym kodzie źródłowym, możesz również znaleźć i wykorzystać kilka gotowych modułów o otwartym kodzie źródłowym w Rejestrze Terraform. Możesz także tworzyć własne moduły z własnymi konfiguracjami i hostować je w prywatnym rejestrze modułów.

Osobiście wolałbym używać Terraform zamiast CloudFormation, jeśli modułowość byłaby dużym wymogiem.

Używanie zagnieżdżonego stosu w CloudFormation nie jest tak proste, jak używanie modułów w Terraform. Głównym czynnikiem jest to, że przekazywanie danych z szablonu CFN do zagnieżdżonego stosu może być dość skomplikowane.

Nie ma standardowego miejsca, w którym można udostępniać szablony CloudFormation. Masz katalog usług AWS, ale to tylko sposób na wymuszenie pewnych zasad tworzenia infrastruktury za pomocą konsoli. Wszyscy zajmujemy się kodem. Podczas korzystania z katalogu usług, chociaż niektóre skomplikowane zadania są enkapsulowane przez pliki CloudFormation, nadal musisz przejść przez ręczne zadanie przejścia do konsoli i określenia parametrów, aby stworzyć swoją infrastrukturę.

Z drugiej strony Terraform ma ustaloną metodę tworzenia, utrzymywania i udostępniania modułów. Możesz zobaczyć dokładne wymagania modułów w Rejestrze modułów Terraform i bardzo łatwo użyć ich w plikach Terraform.

Kontrola i zarządzanie infrastrukturą

Jeśli chcesz ograniczyć zasoby, które Twoi ludzie mogą tworzyć na Twoich kontach AWS: Zarówno AWS CloudFormation, jak i Terraform zapewniają Ci do tego środki.

Porozmawiajmy najpierw o CloudFormation. CloudFormation samo w sobie nie oferuje żadnej kontroli nad sposobem używania szablonów, ale możesz użyć zasad AWS IAM, aby zezwolić tylko użytkownikom na Twoim koncie AWS na używanie tylko standardowych szablonów CloudFormation do tworzenia zasobów. W naszym przykładzie zasobnika S3 możesz chcieć ograniczyć wszystkie uprawnienia „Tworzenie S3” dla użytkowników i zezwolić im tylko na tworzenie zasobników S3 z Katalogu usług AWS lub stosów zagnieżdżonych.

Terraform pozwala kontrolować, które zasoby Twoi użytkownicy mogą tworzyć za pomocą zasad jako narzędzia kodu Posterunek. Sentinel umożliwia wymuszanie drobnoziarnistych, opartych na logice zasad, aby zezwalać lub odmawiać użytkownikom działań za pośrednictwem Terraform. Na przykład możesz odmówić wszystkim zasobom, które tworzą zasobniki S3 i zezwolić użytkownikom na tworzenie zasobników S3 tylko z modułu standardowego.

Zarządzanie państwowe

Zarówno AWS CloudFormation, jak i Terraform muszą śledzić zasoby, które utrzymują.

Terraform przechowuje stan infrastruktury w pliku stanu. Ten plik jest domyślnie przechowywany lokalnie, jednak można go przechowywać na zdalnych backendach, takich jak S3, i umożliwiać wielu użytkownikom wprowadzanie zmian w tym samym zestawie infrastruktury.

CloudFormation nie utrzymuje pliku stanu, przynajmniej takiego, który możemy zobaczyć. CloudFormation jest usługą zarządzaną, więc wszystkie czynności związane z utrzymaniem stanu i kontrolami wykonuje w tle.

Zarówno AWS CloudFormation, jak i Terraform umożliwiają sprawdzenie, jakie zmiany zostaną wprowadzone w Twojej infrastrukturze. W Terraform możesz uruchomić polecenie – „plan terraform” i sposób, w jaki Terraform planuje zastosować zmiany w konfiguracji. W CloudFormation użytkownicy mogą zobaczyć te informacje za pośrednictwem Zbiorów zmian.

Język

Terraform używa języka konfiguracji HashiCorp, HCL, języka stworzonego przez HashiCorp. Jest bardzo podobny do JSON z dodatkowymi wbudowanymi funkcjami i możliwościami.

Szablony CloudFormation są napisane w formatach YAML lub JSON

Logowanie i wycofywanie

Zarówno AWS CloudFormation, jak i Terraform mają dobre możliwości rejestrowania. Z mojego doświadczenia wynika, że ​​błędy i problemy były proste (w większości).

CloudFormation: Domyślnie CloudFormation wycofuje wszystkie zmiany w przypadku nieudanej zmiany stosu. Jest to dobra funkcja, którą można wyłączyć w celu debugowania.

Terraform: Terraform nie cofnie automatycznie zmian w przypadku niepowodzenia. Nie jest to problem, ponieważ zawsze można uruchomić polecenie terraform destroy , aby usunąć częściowo udostępnioną konfigurację i ponownie uruchomić Terraform.

Zakres

Terraform nie ogranicza się do chmury AWS. Najważniejszym czynnikiem przy wyborze między Terraform i CloudFormation jest to, że Terraform obsługuje innych dostawców i usługi w chmurze.

Jeśli więc planujesz używać IAC dla wielu platform chmurowych, Terraform jest najlepszym wyborem. CloudFormation, choć potężne narzędzie, ogranicza się tylko do AWS. Korzystając z Terraform, możesz skonfigurować infrastrukturę i wdrożyć swoją aplikację na wielu platformach chmurowych, dzięki czemu Twoja aplikacja będzie bardziej dostępna i niezawodna.

Wsparcie funkcji

Zwykle, gdy AWS wprowadza nowe usługi i funkcje, CloudFormation zostanie zaktualizowany przed Terraform, ponieważ jest to usługa AWS. Obecnie oba narzędzia obejmują większość usług i funkcji tych usług. Może to być niewielka wada korzystania z Terraform, jednak mamy rozwiązanie.

Istnieje również możliwość utworzenia stosu CloudFormation w kodzie Terraform. Tak więc, jeśli używasz Terraform i nie ma funkcji, możesz tymczasowo skonfigurować stos CloudFormation w kodzie Terraform.

Pomoc techniczna

Płatny plan wsparcia technicznego AWS obejmuje również wsparcie CloudFormation.

HashiCorp zapłacił również za wsparcie techniczne dla Terraforma.

Wniosek

Zarówno AWS CloudFormation, jak i Terraform to potężne i w pełni rozwinięte narzędzia. Powyższe różnice pomogą Ci podjąć świadomą decyzję o wyborze narzędzia w oparciu o Twoje wymagania. Osobista sugestia, jeśli planujesz korzystać z wielu platform w chmurze w przyszłości lub obecnie korzystasz z wielu chmur, powinieneś użyć Terraform jako punktu kompleksowej obsługi dla wszystkich Twoich potrzeb. Jeśli szukasz narzędzia IAC tylko dla AWS, zarówno AWS CloudFormation, jak i Terraform są uczciwą grą.

Jeśli jesteś zainteresowany nauką Terraform, sprawdź te kursy online.