Konfigurowanie programu Terraform w usłudze Azure Cloud Shell przy użyciu programu Azure PowerShell

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania, który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.

W tym artykule pokazano, jak rozpocząć pracę z programem Terraform na platformie Azure przy użyciu usługi Cloud Shell i programu PowerShell.

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

  • Konfigurowanie usługi Cloud Shell
  • Omówienie typowych scenariuszy uwierzytelniania programu Terraform i platformy Azure
  • Uwierzytelnianie za pomocą konta Microsoft z usługi Cloud Shell (przy użyciu powłoki Bash lub programu PowerShell)
  • Uwierzytelnianie za pomocą konta Microsoft z systemu 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. Otwórz usługę Cloud Shell

  1. Jeśli masz już otwartą sesję usługi Cloud Shell, możesz przejść do następnej sekcji.

  2. Przejdź do witryny Azure Portal

  3. W razie potrzeby zaloguj się do subskrypcji platformy Azure i zmień katalog platformy Azure.

  4. Otwórz usługę Cloud Shell.

    Open Cloud Shell from the top menu in the Azure portal.

  5. Jeśli wcześniej nie użyto usługi Cloud Shell, skonfiguruj ustawienia środowiska i magazynu.

  6. Wybierz środowisko wiersza polecenia.

    Select the CLI you want to use in Cloud Shell.

3. Zainstaluj najnowszą wersję programu Terraform w usłudze Azure Cloud Shell

Usługa Cloud Shell automatycznie aktualizuje najnowszą wersję programu Terraform. Jednak aktualizacje są dostępne w ciągu kilku tygodni od wydania. W tym artykule pokazano, jak pobrać i zainstalować bieżącą wersję programu Terraform.

  1. Określ wersję narzędzia Terraform używanego w usłudze Cloud Shell.

    terraform version
    
  2. Jeśli wersja programu Terraform zainstalowana w usłudze Cloud Shell nie jest najnowszą wersją, zostanie wyświetlony komunikat informujący, że wersja programu Terraform jest nieaktualna.

  3. Jeśli pracujesz z wskazaną wersją, przejdź do następnej sekcji. W przeciwnym razie wykonaj następujące kroki.

  4. Przejdź do strony pobierania programu Terraform.

  5. Przewiń w dół do linków pobierania systemu Linux .

  6. Przenieś wskaźnik myszy na łącze 64-bitowe . Ten link jest przeznaczony dla najnowszej 64-bitowej wersji amd z systemem Linux, która jest odpowiednia dla usługi Cloud Shell.

  7. Skopiuj adres URL.

  8. Uruchom curlpolecenie , zastępując symbol zastępczy adresem URL z poprzedniego kroku.

    curl -O <terraform_download_url>
    
  9. Rozpakuj plik.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Jeśli katalog nie istnieje, utwórz katalog o nazwie bin.

    mkdir bin
    
  11. terraform Przenieś plik do bin katalogu.

    mv terraform bin/    
    
  12. Zamknij i uruchom ponownie usługę Cloud Shell.

  13. Sprawdź, czy pobrana wersja programu Terraform jest najpierw w ścieżce.

    terraform version
    

4. Sprawdź domyślną subskrypcję platformy Azure

Po zalogowaniu się do witryny Azure Portal przy użyciu konta Microsoft używana jest domyślna subskrypcja platformy Azure dla tego konta.

Narzędzie Terraform automatycznie uwierzytelnia się przy użyciu informacji z domyślnej subskrypcji platformy Azure.

Uruchom polecenie az account show , aby zweryfikować bieżące konto Microsoft i subskrypcję platformy Azure.

az account show

Wszelkie zmiany wprowadzone za pośrednictwem narzędzia Terraform znajdują się w wyświetlanej subskrypcji platformy Azure. Jeśli chcesz, pomiń pozostałą część tego artykułu.

5. Uwierzytelnianie narzędzia Terraform na platformie Azure

Scenariusze uwierzytelniania programu 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 programu Azure PowerShell nie jest obsługiwane. W związku z tym podczas wykonywania pracy narzędzia Terraform możesz użyć modułu Azure PowerShell, ale najpierw musisz uwierzytelnić się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

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

Uwierzytelnianie na platformie Azure za pośrednictwem konta Microsoft

Konto Microsoft to nazwa użytkownika (skojarzona z adresem e-mail i jego poświadczeniami), która służy do logowania się do usługi firmy Microsoft — na przykład platformy Azure. Konto Microsoft może być skojarzone z co najmniej jedną subskrypcją platformy Azure, z jedną z tych subskrypcji jest domyślna.

W poniższych krokach pokazano, jak to zrobić:

  • Logowanie do platformy Azure interaktywnie przy użyciu konta Microsoft
  • Wyświetlanie listy skojarzonych subskrypcji platformy Azure konta (w tym domyślnych)
  • Ustaw bieżącą subskrypcję.
  1. Otwórz wiersz polecenia, który ma dostęp do interfejsu wiersza polecenia platformy Azure.

  2. Uruchom polecenie 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 az login zostanie wyświetlona lista subskrypcji platformy Azure skojarzonych z zalogowanym kontem Microsoft, w tym domyślną subskrypcją.
  3. Aby potwierdzić bieżącą subskrypcję platformy Azure, uruchom polecenie az account show.

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

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

    Kluczowe punkty:

    • Zastąp <microsoft_account_email> symbol zastępczy adresem e-mail konta Microsoft, 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 adres e-mail to admin@hotmail.com, może być konieczne zastąpienie symbolu zastępczego symbolem live.com#admin@hotmail.com.
  5. Aby użyć określonej subskrypcji platformy Azure, uruchom polecenie az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Kluczowe punkty:

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

Tworzenie jednostki usługi

Zautomatyzowane narzędzia do wdrażania lub używania usług platformy Azure , takich jak Terraform, powinny zawsze mieć ograniczone uprawnienia. Zamiast logowania się do aplikacji jako w pełni uprzywilejowany użytkownik, platforma Azure oferuje nazwy głównej usługi.

Najczęstszym wzorcem jest interakcyjne logowanie się 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 ze skryptów).

  1. Aby utworzyć jednostkę usługi, zaloguj się na platformie Azure. Po uwierzytelnieniu na platformie Azure za pośrednictwem konta Microsoft wróć tutaj.

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

    export MSYS_NO_PATHCONV=1    
    

    Kluczowe punkty:

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

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Kluczowe punkty:

    • Możesz zastąpić <service-principal-name> element nazwą niestandardową środowiska lub całkowicie pominąć parametr . Jeśli pominięto parametr, 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 zostanie wyświetlonych kilka wartości. Wartości appId, passwordi tenant są używane w następnym kroku.
    • Nie można pobrać hasła, jeśli zostanie utracone. W związku z tym należy przechowywać hasło w bezpiecznym miejscu. Jeśli zapomnisz hasło, możesz zresetować poświadczenia jednostki usługi.
    • W tym artykule jest używana jednostka usługi z rolą Współautor . Aby uzyskać więcej informacji na temat ról kontroli dostępu opartej na rolach (RBAC), zobacz Kontrola dostępu oparta na rolach: role wbudowane.
    • Dane wyjściowe z tworzenia jednostki usługi zawierają poufne poświadczenia. Upewnij się, że nie dołączysz tych poświadczeń do kodu lub sprawdź poświadczenia w kontroli źródła.
    • Aby uzyskać więcej informacji na temat opcji tworzenia jednostki usługi przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz artykuł Tworzenie jednostki usługi platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

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

Po utworzeniu jednostki usługi można określić jego poświadczenia w programie Terraform za pomocą zmiennych środowiskowych.

  1. Edytuj plik, ~/.bashrc 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 polecenie source ~/.bashrc (lub jego skrócony odpowiednik . ~/.bashrc). Możesz również zamknąć i ponownie otworzyć usługę Cloud Shell, aby skrypt był uruchamiany automatycznie.

    . ~/.bashrc
    
  3. Po ustawieniu zmiennych środowiskowych można zweryfikować 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 do ARM_SUBSCRIPTION_ID wartości, określ wartość ${env.ARM_SUBSCRIPTION_ID}.
  • Tworzenie i stosowanie planów wykonywania programu Terraform powoduje zmiany 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ższemu przykładowi, aby 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 az account show), podczas gdy zmienne środowiskowe wskazują subB, wszelkie zmiany wprowadzone przez narzędzie Terraform są w podb. W związku z tym należy zalogować się do subskrypcji SubB, aby uruchomić polecenia interfejsu wiersza polecenia platformy Azure lub polecenia programu Azure PowerShell, aby wyświetlić zmiany.

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

Uwaga

Możliwość określenia poświadczeń subskrypcji platformy Azure w pliku konfiguracji programu Terraform może być wygodna — szczególnie podczas testowania. Jednak nie zaleca się przechowywania poświadczeń w pliku zwykłego tekstu, który może być wyświetlany przez osoby nieuwierzyte.

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

Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure

Następne kroki