Aby osiągnąć skalę, zespoły DevOps zawsze szukają sposobów szybkiego wdrażania kodu z zaufanym i powtarzalnym procesem. Jeśli chodzi o chmurę i infrastrukturę, ten proces jest coraz bardziej osiągany za pomocą infrastruktury jako kodu (IaC). Narzędzia IaC obejmują narzędzia ogólnego przeznaczenia po narzędzia przeznaczone dla określonych środowisk. Terraform jest przykładem poprzedniego, podczas gdy Bicep jest przeznaczony do obsługi zadań związanych z platformą Azure.
W tym artykule porównaliśmy dziewięć funkcji infrastruktury i integracji Bicep i Terraform. Zrozumienie tych różnic pomaga zdecydować, które narzędzie najlepiej obsługuje infrastrukturę i procesy.
Stan i zaplecze
Zarówno narzędzia Terraform, jak i Bicep są konfiguracją żądanego stanu (DSC), co ułatwia zarządzanie infrastrukturą IT i programowaniem jako kodem. Narzędzie Terraform przechowuje stan infrastruktury zarządzanej i konfiguracji. Narzędzie Terraform używa tych informacji do mapowania rzeczywistych zasobów na konfigurację, śledzenia metadanych i poprawy wydajności większych infrastruktur. Stan jest przechowywany w pliku lokalnym o nazwie terraform.tfstate
, ale może być również przechowywany zdalnie. Tworzenie kopii zapasowych i zabezpieczanie plików stanu ma kluczowe znaczenie. Podobnie jak Terraform, Bicep jest deklaratywny i dąży do celu. Jednak Bicep nie przechowuje stanu. Zamiast tego Bicep opiera się na wdrożeniu przyrostowym.
Cele infrastruktury
Podczas porównywania struktury Bicep z programem Terraform do zarządzania infrastrukturą chmury należy wziąć pod uwagę docelowe środowisko chmury:
- Tylko platforma Azure
- Wiele chmur lub chmur hybrydowych
Bicep jest specyficzny dla platformy Azure i nie jest przeznaczony do pracy z innymi usługami w chmurze.
Jeśli twoim celem jest zautomatyzowanie wdrożeń w dowolnym z następujących środowisk, narzędzie Terraform jest prawdopodobnie lepszym rozwiązaniem:
- Środowiska wirtualizacji
- Scenariusze z wieloma chmurami — takie jak platforma Azure i inne chmury
- Obciążenia lokalne
Narzędzie Terraform współdziała z innymi dostawcami usług w chmurze lub interfejsami API przy użyciu wtyczek nazywanych dostawcami. Istnieje kilka dostawców platformy Azure terraform, którzy umożliwiają zarządzanie infrastrukturą platformy Azure. Podczas kodowania konfiguracji programu Terraform należy określić wymaganych dostawców, których używasz. Po uruchomieniu narzędzia terraform init określony dostawca jest instalowany i używany z poziomu kodu.
Narzędzia interfejsu wiersza polecenia odgrywają kluczową rolę w orkiestracji dzięki implementacji i zarządzaniu technologią automatyzacji. Zarówno Bicep, jak i Terraform oferują narzędzia interfejsu wiersza polecenia.
Bicep integruje się z interfejsem wiersza polecenia platformy Azure, co umożliwia deweloperom korzystanie z az
poleceń, takich jak:
Interfejs wiersza polecenia narzędzia Terraform umożliwia wykonywanie takich zadań, jak weryfikowanie i formatowanie kodu programu Terraform oraz tworzenie i stosowanie planu wykonania.
Bicep udostępnia również funkcję, która ułatwia integrację aplikacji Bicep z usługą Azure Pipelines. Istnieje podobna funkcja dostępna dla programu Terraform, ale musisz pobrać i zainstalować rozszerzenie Azure Pipelines Terraform Tasks dla programu Visual Studio. Po zainstalowaniu można uruchamiać polecenia interfejsu wiersza polecenia narzędzia Terraform z poziomu usługi Azure Pipelines. Ponadto zarówno narzędzia Terraform, jak i Bicep obsługują funkcję GitHub Actions w celu automatyzowania kompilacji, testów i wdrożeń oprogramowania.
Przetwarzanie
Istnieją pewne ważne różnice między Bicep i Terraform pod względem wydajności i optymalizacji wdrożeń. W przypadku Bicep przetwarzanie odbywa się po stronie podstawowej usługi infrastruktury platformy Azure. Ta funkcja oferuje zalety, takie jak wstępne przetwarzanie w celu sprawdzenia zasad lub dostępności wdrażania wielu wystąpień w regionie. W programie Terraform przetwarzanie odbywa się w ramach klienta programu Terraform. W związku z tym przetwarzanie wstępne nie obejmuje wywołań platformy Azure, ponieważ używa on stanu i HCL (HashiCorp Language) w celu określenia wymaganych zmian.
Uwierzytelnianie
Funkcje uwierzytelniania platformy Azure różnią się w zależności od struktury Bicep i programu Terraform. W przypadku Bicep token autoryzacji jest dostarczany podczas żądania przesyłania pliku Bicep i szablonu usługi ARM. Usługa ARM gwarantuje, że masz uprawnienia zarówno do tworzenia wdrożenia, jak i wdrażania zasobów w określonym szablonie. Narzędzie Terraform uwierzytelnia każdy interfejs API na podstawie poświadczeń dostawcy — takich jak interfejs wiersza polecenia platformy Azure, jednostka usługi lub tożsamości zarządzane dla zasobów platformy Azure. Ponadto w jednej konfiguracji można używać wielu poświadczeń dostawcy.
Integracje platformy Azure
Należy również rozważyć użycie funkcji platformy Azure, takich jak usługa Azure Policy i sposób interakcji z innymi narzędziami i językami. Walidacja wstępna Bicep określa, czy zasób nie jest zgodny z zasadami, tak aby kończył się niepowodzeniem przed wdrożeniem. W związku z tym deweloperzy mogą korygować zasoby przy użyciu zasad przy użyciu udostępnionych szablonów usługi ARM. Szablon usługi ARM może służyć do tworzenia przypisania zasad do innego zasobu na potrzeby zautomatyzowanego korygowania. Program Terraform kończy się jednak niepowodzeniem po wdrożeniu zasobu, który jest niedozwolony z powodu zasad.
Integracja z portalem
Jedną z głównych zalet Bicep nad narzędziem Terraform jest możliwość automatyzowania akcji portalu. Za pomocą aplikacji Bicep można wyeksportować szablony za pomocą witryny Azure Portal. Eksportowanie szablonu pomaga zrozumieć składnię i właściwości, które wdrażają zasoby. Przyszłe wdrożenia można zautomatyzować, zaczynając od wyeksportowanego szablonu i modyfikując go zgodnie z potrzebami. Dopóki szablony programu Terraform nie będą obsługiwane, należy ręcznie przetłumaczyć wyeksportowany szablon.
Mimo że program Terraform nie zapewnia tych samych integracji portalu co Bicep, istniejąca infrastruktura platformy Azure może zostać podjęta w ramach zarządzania programem Terraform przy użyciu usługi Azure Export for Terraform. (Usługa Azure Export for Terraform to narzędzie typu open source należące do firmy Microsoft i obsługiwane przez firmę MicrosoftRepozytorium GitHub platformy Azure/aztfexport).
Zmiany poza pasmem
Zmiany konfiguracji poza pasmem są wprowadzane w konfiguracji urządzenia poza kontekstem narzędzia. Załóżmy na przykład, że wdrożysz zestaw skalowania maszyn wirtualnych przy użyciu narzędzia Bicep lub Terraform. Jeśli zmienisz ten zestaw skalowania maszyn wirtualnych przy użyciu portalu, zmiana będzie miała wartość "poza pasmem" i będzie nieznana narzędziu IaC.
Jeśli używasz Bicep, zmiany poza pasmem powinny być uzgadniane z Bicep i kodem szablonu usługi ARM, aby uniknąć zastąpienia tych zmian w następnym wdrożeniu. Te zmiany nie blokują wdrożenia.
Jeśli używasz narzędzia Terraform, musisz zaimportować zmiany poza pasmem do stanu narzędzia Terraform i zaktualizować listę HCL.
W związku z tym, jeśli środowisko obejmuje częste zmiany poza pasmem, Bicep jest bardziej przyjazny dla użytkownika. W przypadku korzystania z programu Terraform należy zminimalizować zmiany poza pasmem.
Struktury chmury
Przewodnik Cloud Adoption Framework (CAF) to zbiór dokumentacji, najlepszych rozwiązań i narzędzi umożliwiających przyspieszenie wdrażania chmury w całej podróży do chmury. Platforma Azure udostępnia usługi natywne do wdrażania stref docelowych. Bicep upraszcza ten proces przy użyciu środowiska portalu opartego na szablonach usługi ARM i implementacji strefy docelowej. Narzędzie Terraform korzysta z modułu Strefy docelowe w skali przedsiębiorstwa do wdrażania platformy Azure i zarządzania nimi oraz zarządzania nimi.
Podsumowanie
Bicep i Terraform oferują wiele przyjaznych dla użytkownika funkcji infrastruktury i integracji. Te funkcje ułatwiają implementowanie technologii automatyzacji i zarządzanie nimi. Podczas podejmowania decyzji, co jest najlepsze dla środowiska, należy wziąć pod uwagę, czy wdrażasz w więcej niż jednej chmurze, czy też infrastruktura składa się ze środowiska z wieloma lub chmurami hybrydowymi. Ponadto należy wziąć pod uwagę dziewięć funkcji omówionych w tym artykule, aby wybrać najlepszy wybór dla organizacji.
Dzisiejsze organizacje stoją przed dynamicznymi wyzwaniami, które wymagają dużej elastyczności i elastyczności. Środowiska chmury publicznej spełniają te potrzeby dzięki automatyzacji — zwłaszcza za pośrednictwem infrastruktury jako kodu (IaC). Dwie wiodące opcje IaC to Hashicorp Terraform i Bicep. Terraform to narzędzie typu open source, które ułatwia specjalistom DevOps zarządzanie usługami lokalnymi i w chmurze przy użyciu kodu deklaratywnego. Firma Microsoft Bicep korzysta ze składni deklaratywnej, aby uprościć wdrażanie zasobów platformy Azure.
W tym artykule porównaliśmy kilka kluczowych funkcji środowiska użytkownika, aby zidentyfikować podobieństwa i różnice między narzędziami Terraform i Bicep.
Składnia języka
Bicep i Terraform to języki specyficzne dla domeny (DSL), które są łatwe w użyciu i oszczędzają czas dewelopera. Oba narzędzia zawierają podobne słowa kluczowe i pojęcia. Niektóre z tych pojęć to parametryzacja, obsługa projektów obejmujących wiele plików i obsługa modułów zewnętrznych. Program Terraform oferuje jednak bogatszą bibliotekę wbudowanych funkcji dla niektórych zadań. Decyzja między nimi jest kwestią preferencji i doświadczenia. Poniżej przedstawiono krótkie omówienie i niektóre przyjazne dla użytkownika funkcje, które oferuje każda składnia języka.
Bicep to język deklaratywny. W związku z tym kolejność, w jakiej elementy są zdefiniowane w kodzie, nie ma wpływu na sposób przetwarzania wdrożenia. Domyślnym zakresem resourceGroup
docelowym Bicep jest . Użytkownicy mogą używać zmiennych do hermetyzacji złożonych wyrażeń i zwiększyć czytelne pliki Bicep. Koncepcja modułów umożliwia ponowne użycie kodu Bicep w projektach lub zespołach.
Terraform jest również językiem deklaratywnym, który używa języka konfiguracji HashiCorp (HCL). Podstawowym celem listy HCL jest deklarowanie zasobów. Inne funkcje językowe służą do zwiększenia wygody definiowania zasobów. Podobnie jak Bicep, kolejność kodu w plikach konfiguracji narzędzia Terraform nie jest znacząca.
Pomocnicy języka
Zarówno Bicep, jak i Terraform zapewniają pomocników języka w celu uproszczenia zadań kodowania. Ponieważ oba są przyjazne dla użytkownika, wybór w dużej mierze zależy od preferencji i wymagań.
Bicep obsługuje wyrażenia, aby kod był bardziej dynamiczny i elastyczny. Różne typy funkcji mogą być używane w pliku Bicep. Niektóre z tych typów funkcji to funkcje logiczne, liczbowe i niepożądane. Pętle mogą definiować wiele kopii zasobu, modułu, właściwości, zmiennej lub danych wyjściowych. Pętle pomagają uniknąć powtarzania składni w pliku Bicep.
Narzędzie Terraform oferuje również wbudowane funkcje wywoływane z wyrażeń w celu przekształcania i łączenia wartości. Podobnie jak Bicep, wyrażenia narzędzia Terraform mogą zawierać złożone wyrażenia, takie jak odwołania do danych wyeksportowanych przez zasoby i ocenę warunkową. Pętle mogą obsługiwać kolekcje i mogą tworzyć wiele wystąpień zasobu bez konieczności powtarzania kodu.
Moduły
Zarówno Bicep, jak i Terraform obsługują koncepcję modułów. Moduły umożliwiają tworzenie składników wielokrotnego użytku na podstawie kodu. Moduły odgrywają kluczową rolę w skalowaniu infrastruktury i zachowaniu czystej konfiguracji. Ponieważ moduły hermetyzują grupy zasobów, zmniejszają ilość kodu, który należy opracowywać dla podobnych składników infrastruktury. Moduły działają podobnie w systemach Bicep i Terraform, ale różnią się w implementacji.
W aplikacji Bicep moduł jest po prostu plikiem Bicep, który jest wdrażany z innego pliku Bicep. Moduły Bicep służą do poprawy czytelności plików Bicep. Te moduły są również skalowalne. Użytkownicy mogą udostępniać moduły między zespołami, aby uniknąć duplikowania kodu i zmniejszenia błędów. Aby uzyskać więcej informacji na temat definiowania modułu Bicep, zobacz Moduły Bicep.
W narzędziu Terraform moduły są podstawowym sposobem tworzenia pakietów i ponownego użycia konfiguracji zasobów w różnych zespołach. Moduły programu Terraform to kontenery dla wielu zasobów, które są pakowane jako pojedyncza jednostka logiczna. Moduł składa się z kolekcji .tf
i/lub .tf.json
plików przechowywanych razem w katalogu. Oprócz modułów z lokalnego systemu plików program Terraform może również ładować moduły z różnych źródeł. Źródła te obejmują rejestr, ścieżkę lokalną, moduły i usługę GitHub.
Cykl życia aprowizacji
Zarówno program Terraform, jak i Bicep umożliwiają deweloperom zweryfikowanie konfiguracji przed wdrożeniem, a następnie zastosowanie zmian. Narzędzie Terraform zapewnia większą elastyczność w celu zniszczenia wszystkich obiektów zdalnych zarządzanych przez określoną konfigurację. Ta funkcja jest przydatna do czyszczenia obiektów tymczasowych po zakończeniu pracy. Podczas wybierania najlepszej opcji należy wziąć pod uwagę wymagania dotyczące cyklu życia typowych wdrożeń infrastruktury.
Bicep oferuje operację analizy co-jeżeli , która umożliwia wyświetlenie podglądu zmian przed wdrożeniem pliku Bicep. Usługa Azure Resource Manager udostępnia operację what-if
i nie wprowadza żadnych zmian w istniejących zasobach. Następnie można użyć programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure z plikami Bicep w celu wdrożenia zasobów na platformie Azure. Program Azure PowerShell i interfejs wiersza polecenia platformy Azure nie obsługują wdrażania zdalnych plików Bicep. Można jednak użyć interfejsu wiersza polecenia Bicep do skompilowania pliku Bicep do szablonu JSON, a następnie załadować plik JSON do lokalizacji zdalnej.
W narzędziu Terraform polecenie terraform plan jest podobne do operacji Bicep what-if
. terraform plan
Za pomocą polecenia utworzysz plan wykonywania w celu wyświetlenia podglądu przed jego zastosowaniem. Następnie zastosujesz plan wykonywania za pomocą polecenia terraform apply . Prawie wszystko, co robisz z narzędziem Terraform, obejmuje użycie poleceń terraform plan
i terraform apply
.
Wprowadzenie
Bicep i Terraform oferują zasoby ułatwiające rozpoczęcie pracy. Moduł Learn dla aplikacji Bicep ułatwia zdefiniowanie sposobu konfigurowania zasobów platformy Azure. Przedstawiono również wdrożenia kilku zasobów platformy Azure, które zapewniają praktyczne środowisko pracy.
Podobnie platforma HashiCorp Learn udostępnia użytkownikom różne zasoby szkoleniowe narzędzia Terraform, aby nauczyć się instalować i używać narzędzia Terraform. Te zasoby zawierają informacje przedstawiające sposób aprowizacji infrastruktury na platformie Azure przy użyciu narzędzia Terraform.
Tworzenie kodu
Środowisko tworzenia kodu zależy od liczby dodatków, które są dostępne dla wybranego edytora. Na szczęście zarówno Bicep, jak i Terraform oferują zasoby w celu zwiększenia wydajności tworzenia kodu.
W przypadku aplikacji Bicep jednym z najbardziej skutecznych dodatków jest rozszerzenie Bicep Visual Studio Code. Rozszerzenie udostępnia takie funkcje jak walidacja kodu, Intellisense, dostęp do właściwości dot i autouzupełnianie właściwości.
W przypadku programu Terraform rozszerzenie Programu Visual Studio Code z serwerem Terraform Language Server oferuje wiele z tych samych funkcji co rozszerzenie programu Visual Studio Code Bicep. Na przykład rozszerzenie obsługuje również wyróżnianie składni, funkcję IntelliSense, nawigację po kodzie i eksplorator modułu. Firma HashiCorp oferuje również [szczegółowe instrukcje instalacji] w repozytorium GitHub (https://github.com/hashicorp/terraform-ls/blob/main/docs/USAGE.md) na potrzeby konfigurowania i używania serwera językowego Terraform.
Pokrycie platformy Azure
Bicep ma przewagę nad programem Terraform, jeśli chodzi o konfigurowanie zasobów platformy Azure. Bicep jest głęboko zintegrowany z usługami platformy Azure. Ponadto oferuje natychmiastową obsługę nowych funkcji platformy Azure. Narzędzie Terraform udostępnia dwóch dostawców, którzy umożliwiają użytkownikom zarządzanie platformą Azure: AzureRM i AzAPI. Dostawca modułu AzureRM oferuje w pełni dostosowane środowisko dla stabilnych usług platformy Azure. Czasami dotarcie do tego dostosowanego środowiska może spowodować trochę opóźnienia. Dostawca AzAPI to cienka warstwa na podstawie interfejsów API REST usługi Azure Resource Manager, które — podobnie jak Bicep — umożliwia natychmiastową obsługę nowych funkcji platformy Azure. Ważne jest, aby przed podjęciem decyzji wziąć pod uwagę wymagania dotyczące infrastruktury organizacji i sprawdzić, czy są one w pełni obsługiwane.
Społeczność i pomoc techniczna
Społeczność odgrywa kluczową rolę w pomaganiu nauczyć się i przezwyciężyć wyzwania. Zarówno społeczności Terraform, jak i Bicep oferują wysoki poziom zaangażowania i wsparcia.
W przypadku pomocy technicznej aplikacji Bicep, gdzie szukasz pomocy, zależy od charakteru problemu:
- Usterki dokumentacji: w przypadku problemów z dokumentacją Bicep w witrynie Microsoft Learn każdy artykuł zawiera sekcję Opinie.
- Kod źródłowy Bicep i zgłaszanie usterek: odwiedź repozytorium Microsoft Bicep GitHub, aby współtworzyć produkt Bicep typu open source i błędy plików.
W przypadku pomocy technicznej programu Terraform w przypadku pomocy zależy od charakteru problemu:
Usterki dokumentacji: w przypadku problemów z dokumentacją programu Terraform w środowisku Microsoft Learn każdy artykuł zawiera sekcję Opinie.
Kod źródłowy dostawcy i zgłaszanie usterek: firma Microsoft ma repozytoria GitHub, w których można zgłaszać błędy i współtworzyć dostawców platformy Azure programu Terraform typu open source. Aby wyświetlić listę dostępnych dostawców, przejdź do organizacji usługi Azure GitHub i wprowadź terraform-provider-
w polu Znajdź repozytorium... .
Podstawowe pytania dotyczące programu Terraform: odwiedź sekcję narzędzia Terraform w portalu społeczności hashiCorp.
Pytania dotyczące dostawcy programu Terraform: odwiedź sekcję Dostawcy programu Terraform w portalu społeczności hashiCorp.
Podsumowanie
Bicep i Terraform to dwie wiodące opcje IaC, które ułatwiają konfigurowanie i wdrażanie zasobów platformy Azure. Obie oferują przyjazne dla użytkownika funkcje, które pomagają organizacjom zwiększyć wydajność i produktywność. Podczas oceny najlepszego dopasowania do organizacji należy dokładnie wziąć pod uwagę wymagania i preferencje dotyczące infrastruktury.