Wprowadzenie: instalowanie programu Terraform na platformie Windows za pomocą Azure PowerShell

Program Terraform umożliwia definiowanie, wyświetlanie podglądu i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform można tworzyć pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy usług w chmurze , takiego jak platforma Azure, oraz elementów, które są elementami infrastruktury chmury. Po utworzeniu plików konfiguracji należy utworzyć plan wykonywania, który umożliwia wyświetlanie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonania w celu wdrożenia infrastruktury.

W tym artykule opisano, jak rozpocząć pracę z programem Terraform na platformie Azure przy użyciu programu PowerShell.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Instalowanie najnowszej wersji programu PowerShell
  • Instalowanie nowego modułu Az programu PowerShell
  • Instalowanie interfejsu wiersza polecenia platformy Azure
  • Instalowanie programu Terraform
  • Opis typowych scenariuszy uwierzytelniania programu Terraform i platformy Azure
  • Uwierzytelnianie za pośrednictwem konto Microsoft z Cloud Shell (przy użyciu powłoki Bash lub programu PowerShell)
  • Uwierzytelnianie za pośrednictwem konto Microsoft z Windows (przy użyciu powłoki Bash lub programu PowerShell)
  • Tworzenie jednostki usługi przy użyciu interfejsu wiersza polecenia platformy Azure
  • Tworzenie jednostki usługi przy użyciu programu Azure PowerShell
  • Określanie poświadczeń jednostki usługi w zmiennych środowiskowych
  • Określanie poświadczeń jednostki usługi w bloku dostawcy programu Terraform

1. Konfigurowanie środowiska

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

2. Zainstaluj Azure PowerShell

  1. Najnowszy moduł programu PowerShell, który umożliwia interakcję z zasobami platformy Azure, nosi nazwę modułu Azure PowerShell Az. W przypadku korzystania Azure PowerShell Az zalecaną wersją jest program PowerShell 7 (lub nowszy) na wszystkich platformach. Jeśli masz zainstalowany program PowerShell, możesz zweryfikować wersję, wprowadzając następujące polecenie w wierszu polecenia programu PowerShell.

    $PSVersionTable.PSVersion
    
  2. Zainstaluj program PowerShell. Ta demonstracja została przetestowana przy użyciu programu PowerShell 7.1.3 (x64) na Windows 10.

3. Instalowanie interfejsu wiersza polecenia platformy Azure

Aby narzędzie Terraform uwierzytelniało się na platformie Azure, musisz zainstalować interfejs wiersza polecenia platformy Azure. Ta wersja demonstracyjna została przetestowana przy użyciu interfejsu wiersza polecenia platformy Azure w wersji 2.26.1.

4. Zainstaluj program Terraform dla programu Windows

  1. Pobierz program Terraform. Ten artykuł został przetestowany przy użyciu narzędzia Terraform w wersji 1.0.3.

  2. Z pliku do pobrania wyodrębnij plik wykonywalny do odpowiedniego katalogu (na przykład c:\terraform ).

  3. Zaktualizuj globalną ścieżkę systemu do pliku wykonywalnego.

  4. Otwórz okno terminalu.

  5. Sprawdź globalną konfigurację ścieżki za pomocą terraform polecenia .

    terraform -version
    

5. Uwierzytelnianie narzędzia Terraform na platformie Azure

Scenariusze uwierzytelniania narzędzia Terraform i platformy Azure

Narzędzie Terraform obsługuje tylko uwierzytelnianie na platformie Azure za pośrednictwem interfejsu wiersza polecenia platformy Azure. Uwierzytelnianie przy użyciu Azure PowerShell nie jest obsługiwane. W związku z tym, chociaż podczas wykonywania pracy Azure PowerShell terraform możesz użyć modułu , musisz najpierw uwierzytelnić się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

W tym artykule wyjaśniono, jak uwierzytelniać narzędzie Terraform na platformie Azure w następujących scenariuszach. Aby uzyskać więcej informacji na temat opcji uwierzytelniania narzędzia Terraform na platformie Azure, zobacz Authenticating using the Azure CLI (Uwierzytelnianie przy użyciu interfejsu wiersza polecenia platformy Azure).

Uwierzytelnianie na platformie Azure za pośrednictwem konto Microsoft

Adres konto Microsoft to nazwa użytkownika (skojarzona z wiadomością e-mail i jej poświadczeniami), która jest używana do logowania się do usługi usługi firmy Microsoft — takiej jak Platforma Azure. Subskrypcję konto Microsoft można skojarzyć z co najmniej jedną subskrypcją platformy Azure, a jedna z tych subskrypcji jest domyślna.

Poniższe kroki pokazują, jak zalogować się na platformie Azure interaktywnie przy użyciu usługi konto Microsoft, wyświetlić listę skojarzonych subskrypcji platformy Azure konta (w tym domyślne) i ustawić bieżącą subskrypcję.

  1. Otwórz wiersz polecenia, który ma dostęp do interfejsu wiersza polecenia platformy Azure.

  2. Uruchom narzędzie az login bez żadnych parametrów i postępuj zgodnie z instrukcjami, aby zalogować się do platformy Azure.

    az login
    

    Kluczowe punkty:

    • Po pomyślnym zalogowaniu program wyświetla listę subskrypcji platformy Azure skojarzonych z zalogowanym konto Microsoft, w tym az login subskrypcję domyślną.
  3. Aby potwierdzić bieżącą subskrypcję platformy Azure, uruchom az account show.

    az account show
    
  4. Aby wyświetlić wszystkie nazwy i identyfikatory subskrypcji platformy Azure dla określonej konto Microsoft, uruchom az account list.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Kluczowe punkty:

    • Zastąp symbol <microsoft_account_email> zastępczy adresem konto Microsoft e-mail, którego subskrypcje platformy Azure chcesz wyświetlić.
    • W przypadku konta na żywo , takiego jak hotmail lub outlook, może być konieczne określenie w pełni kwalifikowanego adresu e-mail. Jeśli na przykład Twój adres e-mail to admin@hotmail.com , może być konieczne zastąpienie symbolu zastępczego . live.com#admin@hotmail.com
  5. Aby użyć określonej subskrypcji platformy Azure, uruchom az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Kluczowe punkty:

    • Zastąp symbol <subscription_id_or_subscription_name> zastępczy identyfikatorem lub nazwą subskrypcji, której chcesz użyć.
    • Wywołanie az account set nie wyświetla wyników przełączenia do określonej subskrypcji platformy Azure. Można jednak użyć funkcji , az account show aby potwierdzić, że bieżąca subskrypcja platformy Azure została zmieniona.
    • Jeśli uruchamiasz polecenie z poprzedniego kroku, zobaczysz, że domyślna subskrypcja platformy Azure została zmieniona na az account list subskrypcję określoną za pomocą polecenia az account set .

Tworzenie nazwy głównej usługi

Zautomatyzowane narzędzia, które wdrażają lub korzystają z usług platformy Azure , takich jak Terraform, powinny zawsze mieć ograniczone uprawnienia. Zamiast logować aplikacje jako w pełni uprzywilejowanego użytkownika, platforma Azure oferuje jednostki usługi.

Najbardziej powszechnym wzorcem jest interaktywne logowanie do platformy Azure, tworzenie jednostki usługi, testowanie jednostki usługi, a następnie używanie tej jednostki usługi do przyszłego uwierzytelniania (interaktywnie lub za pomocą skryptów).

  1. Aby utworzyć jednostkę usługi, zaloguj się do platformy Azure. Po uwierzytelnieniu na platformie Azure za pośrednictwem konto Microsoftwróć tutaj.

  2. Jeśli tworzysz jednostkę usługi z powłoki Git Bash, ustaw zmienną MSYS_NO_PATHCONV środowiskową . (Ten krok nie jest konieczny, jeśli używasz Cloud Shell).

    export MSYS_NO_PATHCONV=1    
    

    Kluczowe punkty:

    • Zmienną środowiskową MSYS_NO_PATHCONV można ustawić globalnie (dla wszystkich sesji terminali) lub lokalnie (tylko dla bieżącej sesji). Ponieważ tworzenie jednostki usługi nie jest często używane, przykład ustawia wartość dla bieżącej sesji. Aby globalnie ustawić tę zmienną środowiskową, dodaj ustawienie do ~/.bashrc pliku .
  3. Aby utworzyć jednostkę usługi, uruchom az ad sp create-for-rbac.

    az ad sp create-for-rbac --name <service_principal_name>
    

    Kluczowe punkty:

    • Możesz zastąpić parametr niestandardową nazwą środowiska lub całkowicie <service-principal-name> pominąć parametr . W przypadku pominięcia parametru nazwa główna usługi jest generowana na podstawie bieżącej daty i godziny.
    • Po pomyślnym zakończeniu az ad sp create-for-rbac program wyświetli kilka wartości. Wartości appId , i zostaną użyte w następnym password tenant kroku.
    • W przypadku zgubionego hasła nie można pobrać hasła. W związku z tym należy przechowywać hasło w bezpiecznym miejscu. Jeśli zapomnisz hasła, możesz zresetować poświadczenia jednostki usługi.
    • Rola Współautor jest rolą domyślną i ma pełne uprawnienia do odczytu i zapisu na koncie platformy Azure. W tym artykule jest używana jednostka usługi z rolą Współautor. Aby uzyskać więcej informacji na Role-Based Access Control (RBAC) i ról, zobacz RBAC: Built-in roles (RBAC: role wbudowane).
    • Dane wyjściowe tworzenia jednostki usługi zawierają poufne poświadczenia. Pamiętaj, aby nie uwzględniać tych poświadczeń w kodzie ani sprawdzać poświadczeń w kontroli źródła.
    • Aby uzyskać więcej informacji na temat opcji podczas tworzenia jednostki usługi za pomocą interfejsu wiersza polecenia platformy Azure, zobacz artykuł Create an Azure service principal with the Azure CLI (Tworzenie jednostki usługi platformy Azure za pomocą interfejsu wiersza polecenia platformy Azure).

Określanie poświadczeń jednostki usługi w zmiennych środowiskowych

Po utworzeniu jednostki usługi możesz określić jej poświadczenia dla terraform za pośrednictwem zmiennych środowiskowych.

  1. Edytuj ~/.bashrc plik, dodając następujące zmienne środowiskowe.

    export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
    export ARM_TENANT_ID="<azure_subscription_tenant_id>"
    export ARM_CLIENT_ID="<service_principal_appid>"
    export ARM_CLIENT_SECRET="<service_principal_password>"
    
  2. Aby wykonać ~/.bashrc skrypt, uruchom source ~/.bashrc polecenie (lub jego skrócony odpowiednik . ~/.bashrc ). Możesz również zamknąć i ponownie otworzyć Cloud Shell, aby skrypt był uruchamiany automatycznie.

    . ~/.bashrc
    
  3. Po skonfigurowaniu zmiennych środowiskowych można sprawdzić ich wartości w następujący sposób:

    printenv | grep ^ARM*
    

Kluczowe punkty:

  • Podobnie jak w przypadku dowolnej zmiennej środowiskowej, aby uzyskać dostęp do wartości subskrypcji platformy Azure z poziomu skryptu programu Terraform, użyj następującej składni: ${env.<environment_variable>} . Aby na przykład uzyskać dostęp ARM_SUBSCRIPTION_ID do wartości , określ wartość ${env.ARM_SUBSCRIPTION_ID} .
  • Tworzenie i stosowanie planów wykonywania programu Terraform powoduje wykonanie zmian w subskrypcji platformy Azure skojarzonej z jednostką usługi. Ten fakt może czasami być mylący, jeśli logujesz się do jednej subskrypcji platformy Azure, a zmienne środowiskowe wskazują drugą subskrypcję platformy Azure. Przyjrzyjmy się poniższej przykładowi, aby to wyjaśnić. Załóżmy, że masz dwie subskrypcje platformy Azure: SubA i SubB. Jeśli bieżąca subskrypcja platformy Azure to SubA (określona za pośrednictwem ), a zmienne środowiskowe wskazują wartość SubB, wszelkie zmiany wprowadzone przez narzędzie Terraform znajdują się az account show w podb. W związku z tym należy zalogować się do subskrypcji subb, aby uruchamiać polecenia interfejsu wiersza polecenia platformy Azure lub Azure PowerShell polecenia w celu wyświetlenia zmian.

Określanie poświadczeń jednostki usługi w bloku dostawcy programu Terraform

Blok dostawcy platformy Azure definiuje składnię, która umożliwia określenie informacji o uwierzytelnianiu subskrypcji platformy Azure.

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}

  subscription_id   = "<azure_subscription_id>"
  tenant_id         = "<azure_subscription_tenant_id>"
  client_id         = "<service_principal_appid>"
  client_secret     = "<service_principal_password>"
}

# Your code goes here

Przestroga

Możliwość określenia poświadczeń subskrypcji platformy Azure w pliku konfiguracji narzędzia Terraform może być wygodna — szczególnie podczas testowania. Nie zaleca się jednak przechowywania poświadczeń w pliku w czytelnym tekście, który może być przeglądany przez osoby niezau zaufane.

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z programu Terraform na platformie Azure

Następne kroki