Cloudformation / Serverless vs Terraform w AWS
Chciałbym zrozumieć potrzebę narzędzi takich jak Terraform. Kiedy mamy dostępny szablon Cloudformation i można za jego pomocą tworzyć / aktualizować wszystkie usługi AWS, jaki jest sens korzystania z usługi takiej jak Terraform. Proszę zasugeruj.
Odpowiedzi
CloudFormation (CFN) i Terraform (CF) to narzędzia programistyczne typu Infrastructure as Code (IaC).
Jednak CFN jest tylko dla AWS . Nie możesz go używać z Azure, GCP ani czymkolwiek innym poza ekosystemem AWS. W przeciwieństwie do tego TF jest agnostykiem chmurowym . Możesz go używać nie tylko u wielu dostawców chmury, ale także do pracy z produktami spoza chmury, takimi jak docker, różne bazy danych, a nawet pizza domino, jeśli chcesz.
Tak więc główną zaletą TF jest to, że gdy nauczysz się go tylko raz , możesz zastosować go do wielu dostawców chmury. CFN jest przydatne tylko w AWS, a gdy przestaniesz używać CFN, musisz nauczyć się czegoś nowego, aby pracować z inną chmurą.
Istnieją również różnice w działaniu TF i CFN. Obie mają swoje mocne strony i weekendy . Na przykład:
podczas wdrażania przy użyciu CFN wszystkie zasoby są dostępne do przeglądania w jednej centralnej lokalizacji w AWS wraz z kodem źródłowym szablonu. Natomiast z TF nie ma takiego miejsca. Jeśli logujesz się do konsoli AWS, nie masz pojęcia, co zostało stworzone przez TF, jaki był użyty kod źródłowy itp.
TF ma pętle i złożone struktury danych i warunki, podczas gdy CFN nie.
CFN ma zasady tworzenia i polityki aktualizacji, a TF nie.
Możesz kontrolować dostęp do CFN za pomocą zasad CFN i zasad IAM. Nie możesz zrobić tego samego z TF, ponieważ „żyje” poza AWS.
Istnieje kilka powodów, dla których możesz wybrać Terraform zamiast CloudFormation:
- Niezależny od dostawcy: w przyszłości może nadejść moment, w którym konieczna będzie migracja infrastruktury chmury. Może to wynikać z kilku powodów (np. Koszty, zgodność z przepisami itp.). Dzięki Terraform nadal możesz używać tego samego narzędzia do wdrażania nowej infrastruktury. Dzięki inteligentnemu wykorzystaniu modułów Terraform można nawet pozostawić duże części infrastruktury jako repozytorium kodu.
- Wsparcie dla innych narzędzi: to również opiera się nieco na poprzednim punkcie, ale Terraform może wdrażać znacznie więcej niż tylko zasoby AWS. Na przykład można użyć Terraform do zorganizowania wdrożenia maszyny EC2, która jest następnie konfigurowana z Ansible. Lub możesz użyć Terraform do wdrażania aplikacji na szczycie klastra Kubernetes. Chociaż CloudFormation obsługuje niestandardowe zasoby poprzez tworzenie niestandardowych Lambd, jest to dość dużo pracy do utrzymania.
- Szerszy ekosystem: Ze względu na otwarty charakter Terraform istnieje ogromny ekosystem narzędzi, które pomagają rozwiązywać różnego rodzaju problemy, takie jak testowanie infrastruktury jako kodu lub ciągłe budowanie zgodności.
- Prawdopodobnie lepszy język: osobiście uważam, że Terraform jest sposobem bardziej dostosowanym do infrastruktury jako kod niż CloudFormation. Terraform ma znacznie większą elastyczność wbudowaną w język (HCL), a ich system modułowy pozwala na znacznie większą kompozycję niż to, co można osiągnąć w CloudFormation.