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.
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
- Flaga
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`
Uruchom narzędzie terraform init.
terraform init --upgrade
Uruchom plan terraform.
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-only
program . Jeśli ten artykuł nie pomoże, otwórz problem z usługą GitHub.
Dalsze dostosowywanie zapytania
Poniżej opisano dodatkowe zaawansowane flagi z instrukcjami:
Wybieranie środowiska chmury
Aby określić inne środowisko niż chmura publiczna, użyj flagi --env
. Na przykład dla instytucji rządowych USA:
aztfexport [command] --env="usgovernment" [further options] <scope>
Zmienianie wersji dostawcy programu Terraform
Aby uzyskać prostszy dostęp do preferowanej AzureRM
lub AzAPI
wersji, użyj flagi --provider-version
. Jeśli na przykład korzystasz z AzAPI
wersji 1.10.0
:
aztfexport [command] --provider-name=azapi --provider-version=1.10.0 [further options] <scope>
Uwierzytelnianie
Istnieje wiele flag do zarządzania konfiguracją uwierzytelniania. Niektóre flagi zostały dodane tak późno, jak v0.15
:
--env
--tenant-id
--auxiliary-tenant-ids
--client-id
--client-id-file-path
--client-certificate
--client-certificate-path
--client-certificate-password
--client-secret
--client-secret-file-path
--oidc-request-token
--oidc-request-url
--oidc-token
--oidc-token-file-path
--use-managed-identity-cred
(wartość domyślna to false)--use-azure-cli-cred
(wartość domyślna to true)--use-oidc-cred
(wartość domyślna to false)
Powyższe flagi są zgodne z konwencją azurerm
nazewnictwa dostawcy. Wszystkie flagi można również konfigurować za pomocą zmiennych środowiskowych, które zawierają tę samą zmienną środowiskową zdefiniowaną w dostawcy azurerm
.
aztfexport
próbuje uwierzytelnić się przy użyciu każdego z typów poświadczeń w następującej kolejności, zatrzymując się po podaniu tokenu:
- Klucz tajny klienta
- Certyfikat klienta
- OIDC
- Tożsamość zarządzana
- Interfejs wiersza polecenia platformy Azure
Jeśli co najmniej jedna use-xxx-cred
wartość nie jest prawdziwa, ten typ poświadczeń zostanie pominięty. To zachowanie jest takie samo jak dostawca.
Konfiguracja dostawcy może zastąpić dowolną konfigurację uwierzytelniania z pliku aztfexport
. Dzięki temu użytkownicy mogą używać różnych typów poświadczeń między aztfexport
i dostawcą.
Dołączanie przypisań ról
Jeśli chcesz uwzględnić przypisania ról podczas eksportowania zakresu zasobów, użyj --include-role-assignment
polecenia :
aztfexport [command] --include-role-assignment [further options] <scope>