Wybieranie między dostawcami modułu AzureRM i narzędzia AzAPI Terraform

Azure ma dwóch oficjalnych dostawców programu Terraform: AzureRM i AzAPI. Obaj dostawcy zarządzają zasobami Azure za pomocą narzędzia Terraform, ale używają różnych podejść. Zrozumienie tych różnic pomaga wybrać odpowiedniego dostawcę — lub kombinację dostawców — dla projektu.

Omówienie każdego dostawcy

AzureRM jest standardowym dostawcą do zarządzania zasobami Azure za pomocą narzędzia Terraform. Udostępnia on wyselekcjonowane, typizowane bloki zasobów ze zintegrowaną walidacją, spójnym zachowaniem i szeroką dokumentacją społeczności. Jednak moduł AzureRM obsługuje tylko podzbiór typów zasobów Azure i wersji API, a nowe funkcje często opóźniają się względem aktualizacji Azure.

AzAPI to cienka warstwa na szczycie interfejsów API REST Azure Resource Manager (ARM). Obsługuje on dowolny typ zasobu Azure w dowolnej wersji interfejsu API, w tym funkcje i usługi w wersji zapoznawczej, które nie są jeszcze obsługiwane w module AzureRM. AzAPI zapewnia bezpośredni dostęp do interfejsu API usługi ARM bez oczekiwania na aktualizacje dostawcy.

Kiedy należy używać modułu AzureRM

Użyj modułu AzureRM jako dostawcy podstawowego, gdy:

  • Zasoby, które zarządzasz, są w pełni obsługiwane w module AzureRM ze stabilnymi wersjami interfejsu API.
  • Chcesz wyselekcjonowane schematy zasobów z wbudowaną weryfikacją i dobrym wsparciem dla środowiska IDE.
  • Twój zespół ceni szerokie zasoby społeczności, przykłady i dostępność modułów.
  • Zarządzasz dobrze ugruntowanymi usługami Azure, które nie wymagają dostępu do funkcji w wersji zapoznawczej.

Moduł AzureRM jest właściwym ustawieniem domyślnym dla większości zespołów tworzących Azure. Zacznij od modułu AzureRM i uzupełnij go modułem AzAPI tylko w razie potrzeby.

Kiedy należy używać interfejsu AzAPI

Użyj modułu AzAPI jako dostawcy podstawowego lub uzupełnij moduł AzureRM — gdy:

  • Musisz zarządzać zasobami Azure, które nie są jeszcze obsługiwane w usłudze AzureRM.
  • Musisz użyć określonej wersji interfejsu API, w tym wersji zapoznawczej, której moduł AzureRM nie uwidacznia.
  • Potrzebujesz dostępu do właściwości zasobów, których moduł AzureRM nie wyświetla.
  • Chcesz mieć pełną kontrolę nad wersją interfejsu API ze względu na zgodność lub powtarzalność.
  • Zarządzasz zasobami natychmiast po wydaniu Azure, zanim AzureRM doda wsparcie.

Kiedy używać obu dostawców razem

Moduły AzureRM i AzAPI zaprojektowano tak, aby działały obok siebie. Typowym wzorcem jest użycie modułu AzureRM dla większości infrastruktury podczas korzystania z interfejsu AzAPI na potrzeby bezpośredniego dostępu do interfejsu API usługi ARM w razie potrzeby:

  • Służy azapi_update_resource do ustawiania właściwości w zasobach zarządzanych przez moduł AzureRM, których moduł AzureRM nie ujawnia.
  • Użyj azapi_resource do zarządzania nową usługą lub funkcją w wersji przedpremierowej, podczas gdy reszta stosu korzysta z modułu AzureRM.
  • Służy azapi_resource_action do wykonywania operacji na zasobach zarządzanych przez moduł AzureRM, które nie pasują do standardowego cyklu życia tworzenia/odczytu/aktualizacji/usuwania.
# Manage the primary resource with AzureRM
resource "azurerm_kubernetes_cluster" "example" {
  name                = "my-aks"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  dns_prefix          = "myaks"
  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_DS2_v2"
  }
  identity {
    type = "SystemAssigned"
  }
}

# Use AzAPI to set a property not exposed by AzureRM
resource "azapi_update_resource" "aks_preview_feature" {
  type        = "Microsoft.ContainerService/managedClusters@2024-02-01"
  resource_id = azurerm_kubernetes_cluster.example.id

  body = {
    properties = {
      networkProfile = {
        networkDataplane = "cilium"
      }
    }
  }
}

Wybieranie długoterminowej strategii

AzureRM-primary: Zarządzaj wszystkimi zasobami w module AzureRM i używaj interfejsu AzAPI tylko jako tymczasowego mostka dla funkcji, które nie są jeszcze obsługiwane. Migruj zasoby AzAPI do AzureRM, gdy obsługa stanie się dostępna, z użyciem narzędzia aztfmigrate.

AzAPI-primary: zarządzanie wszystkimi zasobami za pomocą interfejsu AzAPI w celu zapewnienia spójnej kontroli wersji interfejsu API i wczesnego dostępu do nowych funkcji. Takie podejście wymaga większej konfiguracji, ale zapewnia pełną kontrolę nad wersją interfejsu API każdego zasobu.

Większość zespołów powinna rozpocząć od strategii opartej na AzureRM i w razie potrzeby przyjąć AzAPI.

Porównanie funkcji

Funkcja AzureRM AzAPI
Obsługuje wszystkie typy zasobów Azure Nie — wyselekcjonowany podzbiór Yes
Obsługuje wersje interfejsu API w wersji zapoznawczej No Yes
Wyselekcjonowane schematy zasobów Yes No
Sprawdzanie poprawności wbudowanej właściwości Yes Częściowe (za pośrednictwem wstępnegolotu)
Autouzupełnianie środowiska IDE dla właściwości Yes Tak (z rozszerzeniem programu VS Code)
Eksportowanie odpowiedzi/filtrowanie JMESPath No Yes
Zarządzanie zasobami płaszczyzny danych Yes Tak (wybrane typy zasobów)
Funkcje dostawcy do konstruowania identyfikatorów No Tak (wersja 2.0 lub nowsza)
Wstępna walidacja przed realizacją planu Tak (wybrane typy zasobów) Tak — włącz walidację wstępną

Następne kroki