Terraform installeren in Windows met Azure PowerShell

Terraform maakt de definitie, preview en implementatie van de cloudinfrastructuur mogelijk. Met Behulp van Terraform maakt u configuratiebestanden met behulp van de HCL-syntaxis. Met de HCL-syntaxis kunt u de cloudprovider opgeven, zoals Azure, en de elementen waaruit uw cloudinfrastructuur bestaat. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van uw infrastructuurwijzigingen kunt bekijken voordat ze worden geïmplementeerd. Zodra u de wijzigingen hebt gecontroleerd, past u het uitvoeringsplan toe om de infrastructuur te implementeren.

In dit artikel wordt beschreven hoe u aan de slag gaat met Terraform in Azure met behulp van PowerShell.

In dit artikel leert u het volgende:

  • De nieuwste versie van PowerShell installeren
  • De nieuwe PowerShell Az-module installeren
  • De Azure CLI installeren
  • Terraform installeren
  • Algemene Terraform- en Azure-verificatiescenario's begrijpen
  • Verifiëren via een Microsoft-account vanuit Cloud Shell (met behulp van Bash of PowerShell)
  • Verifiëren via een Microsoft-account vanuit Windows (met behulp van Bash of PowerShell)
  • Een service-principal maken met behulp van de Azure CLI
  • Een service-principal maken met Azure PowerShell
  • Referenties voor de service-principal opgeven in omgevingsvariabelen
  • Referenties voor de service-principal opgeven in een Terraform-providerblok

1. Uw omgeving configureren

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.

2. Azure PowerShell installeren

  1. De nieuwste PowerShell-module waarmee interactie met Azure-resources mogelijk is, wordt de Azure PowerShell Az-module genoemd. Wanneer u de Azure PowerShell Az-module gebruikt, is PowerShell 7 (of hoger) de aanbevolen versie op alle platforms. Als u PowerShell hebt geïnstalleerd, kunt u de versie controleren door de volgende opdracht in te voeren bij een PowerShell-prompt.

    $PSVersionTable.PSVersion
    
  2. Installeer PowerShell. Deze demo is getest met PowerShell 7.2.1 (x64) in Windows 10.

3. De Azure CLI installeren

Als u terraform wilt verifiëren bij Azure, moet u de Azure CLI installeren. Deze demo is getest met behulp van Azure CLI versie 2.32.0.

4. Terraform voor Windows installeren

  1. Download Terraform. Dit artikel is getest met Terraform versie 1.1.4.

  2. Pak het uitvoerbare bestand uit de download uit naar een map van uw keuze (bijvoorbeeld c:\terraform).

  3. Werk de globale omgevingsvariabele PATH van uw systeem bij om de map op te nemen die het uitvoerbare bestand bevat.

  4. Een terminalvenster openen.

  5. Controleer de configuratie van het globale pad met de terraform opdracht.

    terraform -version
    

5. Terraform verifiëren bij Azure

Terraform- en Azure-verificatiescenario's

Terraform biedt alleen ondersteuning voor verificatie bij Azure via de Azure CLI. Verificatie met behulp van Azure PowerShell wordt niet ondersteund. Hoewel u de Azure PowerShell-module kunt gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich eerst verifiëren bij Azure met behulp van de Azure CLI.

In dit artikel wordt uitgelegd hoe u Terraform verifieert bij Azure voor de volgende scenario's. Zie Verifiëren met behulp van de Azure CLI voor meer informatie over opties voor het verifiëren van Terraform bij Azure.

Verifiëren bij Azure via een Microsoft-account

Een Microsoft-account is een gebruikersnaam (gekoppeld aan een e-mailadres en de bijbehorende referenties) die wordt gebruikt om u aan te melden bij Microsoft-services, zoals Azure. Een Microsoft-account kan worden gekoppeld aan een of meer Azure-abonnementen, waarbij een van deze abonnementen de standaardinstelling is.

In de volgende stappen ziet u hoe:

  • Interactief aanmelden bij Azure met behulp van een Microsoft-account
  • De gekoppelde Azure-abonnementen van het account weergeven (inclusief de standaardinstelling)
  • Stel het huidige abonnement in.
  1. Open een opdrachtregel die toegang heeft tot de Azure CLI.

  2. Voer az login zonder parameters uit en volg de instructies om u aan te melden bij Azure.

    az login
    

    Belangrijkste punten:

    • Wanneer u zich hebt aangemeld, az login wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan het aangemelde Microsoft-account, inclusief het standaardabonnement.
  3. Voer az account show uit om het huidige Azure-abonnement te bevestigen.

    az account show
    
  4. Als u alle azure-abonnementsnamen en id's voor een specifiek Microsoft-account wilt weergeven, voert u az account list uit.

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

    Belangrijkste punten:

    • Vervang de <microsoft_account_email> tijdelijke aanduiding door het e-mailadres van het Microsoft-account waarvan u de Azure-abonnementen wilt vermelden.
    • Met een live-account, zoals een Hotmail of Outlook, moet u mogelijk het volledig gekwalificeerde e-mailadres opgeven. Als uw e-mailadres bijvoorbeeld is admin@hotmail.com, moet u de tijdelijke aanduiding mogelijk vervangen door live.com#admin@hotmail.com.
  5. Als u een specifiek Azure-abonnement wilt gebruiken, voert u az account set uit.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Belangrijkste punten:

    • Vervang de <subscription_id_or_subscription_name> tijdelijke aanduiding door de id of naam van het abonnement dat u wilt gebruiken.
    • Bij het aanroepen az account set worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruiken az account show om te bevestigen dat het huidige Azure-abonnement is gewijzigd.
    • Als u de az account list opdracht uit de vorige stap uitvoert, ziet u dat het standaard Azure-abonnement is gewijzigd in het abonnement waarmee az account setu hebt opgegeven.

Een service-principal maken

Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van toepassingen zich te laten aanmelden als een gebruiker met volledige rechten, biedt Azure Service Principals.

Het meest voorkomende patroon is om u interactief aan te melden bij Azure, een service-principal te maken, de service-principal te testen en die service-principal vervolgens te gebruiken voor toekomstige verificatie (interactief of vanuit uw scripts).

  1. Meld u aan bij Azure om een service-principal te maken. Nadat u zich hebt geverifieerd bij Azure via een Microsoft-account, keert u hier terug.

  2. Als u een service-principal maakt vanuit Git Bash, stelt u de MSYS_NO_PATHCONV omgevingsvariabele in. (Deze stap is niet nodig als u Cloud Shell gebruikt.)

    export MSYS_NO_PATHCONV=1    
    

    Belangrijkste punten:

    • U kunt de MSYS_NO_PATHCONV omgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (alleen voor de huidige sessie). Omdat u niet vaak een service-principal maakt, stelt het voorbeeld de waarde voor de huidige sessie in. Als u deze omgevingsvariabele globaal wilt instellen, voegt u de instelling toe aan het ~/.bashrc bestand.
  3. Voer az ad sp create-for-rbac uit om een service-principal te maken.

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

    Belangrijkste punten:

    • U kunt de <service-principal-name> parameter vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaat, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd.
    • Wanneer de voltooiing is voltooid, az ad sp create-for-rbac worden verschillende waarden weergegeven. De appIdwaarden en waarden tenantpasswordworden gebruikt in de volgende stap.
    • Het wachtwoord kan niet worden opgehaald als het verloren gaat. Als zodanig moet u uw wachtwoord opslaan op een veilige plaats. Als u uw wachtwoord bent vergeten, kunt u de referenties van de service-principal opnieuw instellen.
    • Voor dit artikel wordt een service-principal met de rol Inzender gebruikt. Zie RBAC: Ingebouwde rollen voor meer informatie over rollen gebaseerd toegangsbeheer (RBAC).
    • De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code opneemt of controleer de referenties in uw broncodebeheer.
    • Zie het artikel Een Azure-service-principal maken met de Azure CLI voor meer informatie over opties bij het maken van een service-principal met de Azure CLI.

Referenties voor de service-principal opgeven in omgevingsvariabelen

Zodra u een service-principal hebt gemaakt, kunt u de referenties voor Terraform opgeven via omgevingsvariabelen.

  1. Bewerk het ~/.bashrc bestand door de volgende omgevingsvariabelen toe te voegen.

    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. Als u het ~/.bashrc script wilt uitvoeren, voert u het script source ~/.bashrc uit (of het verkorte equivalent . ~/.bashrc). U kunt Cloud Shell ook afsluiten en opnieuw openen om het script automatisch uit te voeren.

    . ~/.bashrc
    
  3. Zodra de omgevingsvariabelen zijn ingesteld, kunt u de waarden als volgt controleren:

    printenv | grep ^ARM*
    

Belangrijkste punten:

  • Net als bij elke omgevingsvariabele, gebruikt u de volgende syntaxis om toegang te krijgen tot een Azure-abonnementswaarde vanuit een Terraform-script: ${env.<environment_variable>} Als u bijvoorbeeld toegang wilt krijgen tot de ARM_SUBSCRIPTION_ID waarde, geeft u ${env.ARM_SUBSCRIPTION_ID}op.
  • Bij het maken en toepassen van Terraform-uitvoeringsplannen worden wijzigingen aangebracht in het Azure-abonnement dat is gekoppeld aan de service-principal. Dit kan soms verwarrend zijn als u bent aangemeld bij één Azure-abonnement en de omgevingsvariabelen verwijzen naar een tweede Azure-abonnement. Laten we eens kijken naar het volgende voorbeeld om het uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via az account show) terwijl de omgevingsvariabelen verwijzen naar SubB, bevinden eventuele wijzigingen van Terraform zich in SubB. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten of Azure PowerShell-opdrachten uit te voeren om uw wijzigingen weer te geven.

Referenties voor de service-principal opgeven in een Terraform-providerblok

Het Blok azure-provider definieert syntaxis waarmee u de verificatiegegevens van uw Azure-abonnement kunt opgeven.

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

Let op

De mogelijkheid om uw Azure-abonnementsreferenties op te geven in een Terraform-configuratiebestand kan handig zijn, met name bij het testen. Het is echter niet raadzaam om referenties op te slaan in een bestand met duidelijke tekst dat kan worden bekeken door niet-vertrouwde personen.

Problemen met Terraform in Azure oplossen

Veelvoorkomende problemen oplossen bij het gebruik van Terraform in Azure

Volgende stappen