Udostępnij za pośrednictwem


Infrastruktura jako kod

Infrastruktura jako kod (IaC) to kluczowa praktyka metodyki DevOps obejmująca zarządzanie infrastrukturą, taką jak sieci, usługi obliczeniowe, bazy danych, magazyny i topologia połączeń w modelu opisowym. Usługa IaC umożliwia zespołom szybsze opracowywanie i wydawanie zmian oraz większe zaufanie. Zalety IaC obejmują:

  • Zwiększone zaufanie do wdrożeń
  • Możliwość zarządzania wieloma środowiskami
  • Ulepszone zrozumienie stanu infrastruktury

Aby uzyskać więcej informacji na temat zalet używania infrastruktury jako kodu, zobacz Powtarzalna infrastruktura.

Narzędzia

Istnieją dwa podejścia, które można zastosować podczas implementowania infrastruktury jako kodu.

  • Infrastruktura imperatywne jako kod obejmuje pisanie skryptów w językach takich jak Bash lub PowerShell. Jawnie stwierdzasz polecenia, które są wykonywane w celu wygenerowania żądanego wyniku. W przypadku korzystania z wdrożeń imperatywnych należy zarządzać sekwencją zależności, kontrolą błędów i aktualizacjami zasobów.
  • Deklaratywna infrastruktura jako kod obejmuje napisanie definicji definiującej sposób, w jaki środowisko ma wyglądać. W tej definicji określasz żądany wynik, a nie sposób, w jaki ma zostać osiągnięty. Narzędzia określają, jak osiągnąć rezultat, poprzez analizowanie bieżącego stanu, porównując go ze stanem docelowym, a następnie wprowadzając różnice.

Szablony ARM

Przejrzyj informacje o szablonach usługi Azure Resource Manager (szablony usługi ARM).

Biceps

Bicep to język specyficzny dla domeny (DSL), który używa składni deklaratywnej do wdrażania zasobów platformy Azure. W plikach Bicep zdefiniujesz infrastrukturę, którą zamierzasz wdrożyć, i jej właściwości. W porównaniu z szablonami usługi ARM pliki Bicep są łatwiejsze do odczytania i zapisu dla odbiorców innych niż deweloperzy, ponieważ używają zwięzłej składni.

Ten przykładowy kod Bicep wdraża konto usługi Azure Storage w regionie grupy zasobów. Stosuje nadmiarowość Standard_LRS i rodzaj StorageV2. Warstwa dostępu jest ustawiona na wartość 'Hot' w celu częstego dostępu do danych.

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Terraformowanie

Przejrzyj informacje o programie Terraform.

Interfejs wiersza polecenia platformy Azure

Przejrzyj informacje o Azure CLI.

Infrastruktura jako moduły kodu

Jednym z celów używania kodu do wdrażania infrastruktury jest unikanie duplikowania pracy lub tworzenia wielu szablonów w tym samym lub podobnym celu. Moduły infrastruktury powinny być wielokrotnego użytku i elastyczne i powinny mieć jasny cel.

Moduły są niezależnymi plikami, zwykle zawierającymi zestaw zasobów, które mają być wdrażane razem. Moduły umożliwiają podzielenie złożonych szablonów na mniejsze, bardziej zarządzane zestawy kodu. Można upewnić się, że każdy moduł koncentruje się na określonym zadaniu i że wszystkie moduły są wielokrotnego użytku dla wielu wdrożeń i obciążeń.

Moduły Bicep

Bicep umożliwia tworzenie i wywoływanie modułów. Po utworzeniu modułów można ich używać z dowolnego innego szablonu Bicep. Moduł wysokiej jakości Bicep powinien definiować wiele powiązanych zasobów. Na przykład podczas definiowania funkcji platformy Azure zazwyczaj wdrażasz określoną aplikację, plan hostingu dla tej aplikacji i konto magazynu dla metadanych tej aplikacji. Te składniki są definiowane oddzielnie, ale tworzą logiczne grupowanie zasobów, dlatego należy rozważyć zdefiniowanie ich razem jako modułu.

Często używane są moduły Bicep:

  • Parametry do akceptowania wartości z modułu wywołującego.
  • Wartości wyjściowe zwracające wyniki do modułu wywołującego.
  • Zasoby do zdefiniowania co najmniej jednego obiektu infrastruktury dla modułu do zarządzania.

Publikowanie modułów Bicep

Istnieje kilka opcji publikowania i udostępniania modułów Bicep.

  • Rejestr publiczny: Rejestr publicznych modułów jest hostowany w rejestrze kontenerów firmy Microsoft (MCR). Jego kod źródłowy i zawarte w nim moduły są przechowywane w usłudze GitHub.
  • Rejestr prywatny: Za pomocą rejestru kontenerów platformy Azure można publikować moduły w rejestrze prywatnym. Aby uzyskać informacje na temat publikowania modułów w rejestrze w ramach procesu CI/CD, zajrzyj do Bicep i GitHub Actions lub, jeśli wolisz, Bicep i Azure Pipelines.
  • Specyfikacja szablonu: Do publikowania modułów Bicep można użyć specyfikacji szablonu . Specyfikacje szablonów mają być kompletnymi szablonami, ale Bicep umożliwia wdrażanie modułów przy użyciu specyfikacji szablonu.
  • System kontroli wersji: Moduły można ładować bezpośrednio z narzędzi kontroli wersji, takich jak GitHub lub Azure DevOps.

Moduły programu Terraform

Narzędzie Terraform umożliwia tworzenie i wywoływanie modułów. Każda konfiguracja narzędzia Terraform ma co najmniej jeden moduł, znany jako moduł główny, składający się z zasobów zdefiniowanych w .tf plikach w głównym katalogu roboczym. Każdy moduł może wywoływać inne moduły, co umożliwia dołączenie modułów podrzędnych do głównego pliku konfiguracji. Moduły mogą być również wywoływane wiele razy w ramach tej samej konfiguracji lub z różnych konfiguracji.

Moduły są definiowane przy użyciu wszystkich tych samych pojęć dotyczących języka konfiguracji. Najczęściej są one używane:

  • Zmienne wejściowe do akceptowania wartości z modułu wywołującego.
  • Wartości wyjściowe zwracające wyniki do modułu wywołującego.
  • Zasoby do zdefiniowania co najmniej jednego obiektu infrastruktury dla modułu do zarządzania.

Publikowanie modułów programu Terraform

Istnieje kilka opcji publikowania i udostępniania modułów programu Terraform:

  • Rejestr publiczny: Firma HashiCorp ma własny rejestr modułów Terraform, który umożliwia użytkownikom generowanie współużytkowalnych modułów programu Terraform. Obecnie w rejestrze modułów programu Terraform opublikowano kilka modułów platformy Azure .
  • Rejestr prywatny: Moduły terraform można bezproblemowo publikować w prywatnym repozytorium, na przykład Terraform Cloud Private Registry lub Azure Container Registry.
  • System kontroli wersji: Moduły prywatne można ładować bezpośrednio z narzędzi kontroli wersji, takich jak GitHub. Aby uzyskać informacje na temat obsługiwanych źródeł, zobacz Terraform module sources (Źródła modułów narzędzia Terraform).

Uwagi dotyczące projektowania

  • Rozważ użycie IaC podczas wdrażania zasobów strefy docelowej na platformie Azure. Usługa IaC w pełni realizuje optymalizację wdrożenia, zmniejsza nakład pracy nad konfiguracją i automatyzuje wdrożenia całego środowiska.

  • Określ, czy powinieneś podjąć podejście do IaC w trybie imperatywnym albo deklaratywnym.

    • W przypadku podejścia imperatywnego należy jawnie określić polecenia do wykonania, które generują pożądany wynik.

    • W przypadku podejścia deklaratywnego określ żądany wynik, a nie sposób jego wykonania.

  • Rozważmy zakresy wdrażania. Dobrze zrozumieć poziomy zarządzania i hierarchię zarządzania platformy Azure. Każde wdrożenie IaC musi znać zakres wdrażania zasobów platformy Azure.

  • Określ, czy należy użyć natywnego narzędzia IaC platformy Azure, czy nienatywnego narzędzia IaC dla Azure. Oto niektóre ważne kwestie:

    • Narzędzia natywne platformy Azure, takie jak interfejs wiersza polecenia platformy Azure, szablony usługi ARM i Bicep, są w pełni obsługiwane przez firmę Microsoft, co pozwala na szybsze integrację nowych funkcji.

    • Narzędzia inne niż natywne, takie jak Terraform, umożliwiają zarządzanie infrastrukturą jako kodem dla wielu dostawców chmury, takich jak AWS lub GCP. Jednak integracja nowych funkcji platformy Azure w systemach lub regionach zewnętrznych może zająć trochę czasu. Jeśli Twoja organizacja jest wielochmurowa lub twoja organizacja już używa i dobrze zorientowana w programie Terraform, rozważ wdrożenie stref docelowych platformy Azure przy użyciu narzędzia Terraform.

  • Ponieważ moduły umożliwiają podzielenie złożonych szablonów na mniejsze zestawy kodu, rozważ użycie modułów IaC dla zasobów, które są często wdrażane razem. Możesz zapewnić, że każdy moduł koncentruje się na konkretnym zadaniu i jest wielokrotnego użytku w przypadku wielu wdrożeń i obciążeń.

  • Rozważ wdrożenie strategii publikowania dla modułów IaC, wybierając między publicznymi rejestrami, rejestrami prywatnymi lub systemem kontroli wersji, takimi jak repozytorium Git.

  • Rozważ użycie pipeline'u CI/CD (ciągła integracja/ciągłe wdrażanie) do wdrożeń IaC (Infrastruktura jako kod). Potok danych egzekwuje proces wielokrotnego użycia, który ustawiłeś, aby zapewnić jakość swoich wdrożeń i środowiska Azure.

Zalecenia dotyczące projektowania

  • Zastosuj podejście IaC do wdrażania, zarządzania, nadzorowania i wspierania wdrożeń stref docelowych na platformie Azure.

  • Użyj natywnych narzędzi platformy Azure dla IaC w następujących scenariuszach:

    • Chcesz używać tylko natywnych narzędzi platformy Azure. Twoja organizacja może mieć wcześniejsze doświadczenie we wdrażaniu szablonów ARM lub Bicep.

    • Twoja organizacja chce mieć natychmiastową pomoc techniczną dla wszystkich wersji zapoznawczych i ogólnodostępnych usług platformy Azure.

  • Użyj narzędzi innych niż natywne dla IaC w następujących scenariuszach:

    • Twoja organizacja obecnie używa narzędzia Terraform do wdrażania infrastruktury w innych chmurach, takich jak AWS lub GCP.

    • Twoja organizacja nie musi mieć natychmiastowej pomocy technicznej dla wszystkich wersji zapoznawczych i ogólnie dostępnej wersji usług platformy Azure.

  • Użyj modułów IaC wielokrotnego użytku, aby uniknąć powtarzalnej pracy. Moduły można udostępniać w całej organizacji, aby wdrażać wiele projektów lub obciążeń i zarządzać mniej złożonym kodem.

  • Publikowanie i używanie modułów IaC z publicznych rejestrów w następujących scenariuszach:

    • Chcesz użyć modułów dla Azure Landing Zone opublikowanych już w publicznych rejestrach. Aby uzyskać więcej informacji, zobacz moduł stref lądowania Azure Terraform.

    • Chcesz używać modułów, które są obsługiwane, aktualizowane i obsługiwane przez dostawców modułów firmy Microsoft, Terraform lub innych dostawców modułów.

      • Upewnij się, że zapoznałeś się z oświadczeniem wsparcia od każdego dostawcy modułów, którego ocenisz.
  • Publikowanie i używanie modułów IaC z prywatnych rejestrów lub systemów kontroli wersji w następujących scenariuszach:

    • Chcesz utworzyć własne moduły na podstawie wymagań organizacji.

    • Chcesz mieć pełną kontrolę nad wszystkimi funkcjami i konserwować, aktualizować i publikować nowe wersje modułów.

  • Użyj ścieżki CI/CD, aby wdrożyć artefakty IaC i zapewnić jakość wdrożenia oraz środowisk Azure.