Korzystanie z usługi Azure Export for Terraform w zaawansowanych scenariuszach

W tym artykule wyjaśniono, jak wykonać niektóre bardziej zaawansowane zadania za pomocą usługi Azure Export for Terraform.

  • Dołączanie zasobów do istniejących środowisk programu Terraform.
  • Eksportowanie zasobów do istniejącego środowiska terraform ze zdalnym stanem zaplecza

Dołączanie do istniejących zasobów

Domyślnie usługa Azure Export for Terraform zapewnia, że katalog wyjściowy jest pusty, aby uniknąć konfliktów z istniejącymi plikami użytkownika. Jeśli musisz zaimportować zasoby do istniejącego pliku stanu, dodaj flagę --append .

aztfexport [command] --append <scope>

Po określeniu --append flagi usługa Azure Export for Terraform sprawdza, czy w bieżącym katalogu znajduje się wstępnie istniejący provider lub terraform zablokowany. Jeśli nie, narzędzie tworzy plik dla każdego bloku, a następnie kontynuuje eksportowanie. Jeśli katalog wyjściowy zawiera plik stanu, wszystkie wyeksportowane zasoby zostaną zaimportowane do pliku stanu.

Ponadto wygenerowany plik ma .aztfexport sufiks przed rozszerzeniem , na przykład main.aztfexport.tf , aby uniknąć potencjalnych konfliktów nazw plików.

Jeśli uruchamiasz aztfexport --append wiele razy, zostanie utworzony jeden main.aztfexport.tf z wynikami eksportu dołączonymi do pliku za każdym razem, gdy polecenie zostanie uruchomione.

Korzystanie z własnej konfiguracji narzędzia Terraform

Domyślnie usługa Azure Export for Terraform używa lokalnego zaplecza do przechowywania pliku stanu. Można jednak również użyć zdalnego zaplecza. Usługa Azure Export for Terraform umożliwia zdefiniowanie własnych terraform lub provider bloków do przekazania.

Zdefiniuj .tf te bloki w pliku w katalogu docelowym, wyeksportuj z --append flagą i eksportuje konfigurację do określonej wersji zaplecza i dostawcy (jeśli została podana).

Ważne

Jeśli określona wersja modułu AzureRM nie jest zgodna z zainstalowaną wersją podczas eksportowania, polecenie zakończy się niepowodzeniem.

Przykład usługi Azure Storage

Ten przykład jest oparty na artykule Store Terraform state in Azure Storage (Przechowywanie stanu narzędzia Terraform w usłudze Azure Storage).

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "tfstate"
        storage_account_name = "storageacc"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

provider "azurerm" {
  features {}
}

Przykład narzędzia Terraform Cloud

terraform {
  cloud {
    organization = "aztfexport-test"
    workspaces {
      name = "aztfexport-playground"
    }
  }
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>3.0"
    }
  }
}
provider "azurerm" {
  features {
  }
}

Wbudowane środowisko

Aby wyeksportować do wbudowanego zaplecza, użyj --backend-type opcji i --backend-config . Aby uzyskać więcej informacji na temat konfigurowania zaplecza programu Terraform, zobacz Konfiguracja zaplecza programu Terraform.

Korzystając z naszego przykładu konta usługi Azure Storage, potrzebne są następujące elementy zdefiniowane w dokumentacji zaplecza modułu AzureRM.

  • Nazwa grupy zasobów
  • Nazwa konta magazynu
  • Nazwa kontenera magazynu

Przekaż te parametry do polecenia wraz z typem zaplecza:

aztfexport [subcommand] --backend-type=azurerm \
                        --backend-config=resource_group_name=<resource group name> \
                        --backend-config=storage_account_name=<account name> \
                        --backend-config=container_name=<container name> \
                        --backend-config=key=terraform.tfstate 

Kluczowe punkty:

  • W poprzednim przykładzie używam znaku kontynuacji wiersza systemu Unix, aby kod był dobrze wyświetlany w przeglądarce. Może być konieczne zmianę tych znaków tak, aby były zgodne ze środowiskiem wiersza polecenia — takim jak program PowerShell — lub połączyć polecenie w jednym wierszu.
  • Jeśli stan zaplecza już istnieje, usługa Azure Export for Terraform scala nowe zasoby z istniejącym stanem automatycznie. Nie musisz określać opcji wbudowanej --append .

Eksportowanie zasobów platformy Azure do istniejącego środowiska programu Terraform

Teraz połączmy to wszystko! Wyobraź sobie, że nowe zasoby zostały utworzone poza programem Terraform, które należy przenieść do zarządzania programem Terraform. Aby ukończyć sekcję, upewnij się, że skonfigurowano zaplecze. W tym samouczku jest używana ta sama konfiguracja określona w samouczku dotyczącym stanu zdalnego usługi Azure Storage.

  1. W katalogu nadrzędnym, w którym chcesz utworzyć katalog tymczasowy, uruchom następujące polecenie:

    aztfexport resource -o tempdir --hcl-only <resource_id>
    

    Kluczowe punkty:

    • Flaga -o określa, aby utworzyć katalog, jeśli nie istnieje.
    • Flaga --hcl-only określa eksportowanie skonfigurowanych zasobów do listy HCL
  2. Po sprawdzeniu, czy zasób można dołączyć, skorzystaj z wygenerowanego pliku mapowania i --append flagi, aby upewnić się, że usługa Azure Export uwzględnia wstępnie istniejący stan zdalny i wersje dostawcy w istniejącym środowisku:

    aztfexport map --append `./tempdir/aztfexportResourceMapping.json`
    
  3. Uruchom narzędzie terraform init.

    terraform init --upgrade
    
  4. Uruchom plan terraform.

  5. W usłudze Azure Export for Terraform nie powinny być wyświetlane żadne zmiany.

Gratulacje! Infrastruktura i jej odpowiedni stan zostały pomyślnie dołączone do środowiska programu Terraform.

Jeśli plan napotyka problemy, zobacz Pojęcia związane z usługą Azure Export for Terraform, aby zrozumieć ograniczenia dotyczące wdrażania kodu wygenerowanego przez --hcl-onlyprogram . Jeśli ten artykuł nie pomoże, otwórz problem z usługą GitHub.

Następne kroki