Terraform configureren in Azure Cloud Shell 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 Cloud Shell en PowerShell.

In dit artikel leert u het volgende:

  • Cloud Shell configureren
  • 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. Open Cloud Shell

  1. Als u al een Cloud Shell-sessie hebt geopend, kunt u doorgaan naar de volgende sectie.

  2. Browse naar de Azure-portal

  3. Meld u indien nodig aan bij uw Azure-abonnement en wijzig de Azure-directory.

  4. Open Cloud Shell.

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

  5. Als u Cloud Shell nog niet eerder hebt gebruikt, configureert u de omgevings- en opslaginstellingen.

  6. Selecteer de opdrachtregelomgeving.

    Select the CLI you want to use in Cloud Shell.

3. Installeer de nieuwste versie van Terraform in Azure Cloud Shell

Cloud Shell wordt automatisch bijgewerkt naar de nieuwste versie van Terraform. De updates zijn echter binnen een paar weken na de release beschikbaar. In dit artikel leest u hoe u de huidige versie van Terraform downloadt en installeert.

  1. Bepaal de versie van Terraform die wordt gebruikt in Cloud Shell.

    terraform version
    
  2. Als de Terraform-versie die is geïnstalleerd in Cloud Shell niet de nieuwste versie is, ziet u een bericht waarin wordt aangegeven dat de versie van Terraform verouderd is.

  3. Als u prima met de aangegeven versie werkt, gaat u verder met de volgende sectie. Ga anders verder met de volgende stappen.

  4. Blader naar de terraform-downloadpagina.

  5. Schuif omlaag naar de downloadkoppelingen voor Linux .

  6. Beweeg uw muis over de 64-bits koppeling. Deze koppeling is voor de nieuwste 64-bits Linux AMD-versie, die geschikt is voor Cloud Shell.

  7. Kopieer de URL.

  8. Voer curlde tijdelijke aanduiding uit en vervang de tijdelijke aanduiding door de URL uit de vorige stap.

    curl -O <terraform_download_url>
    
  9. Pak het bestand uit.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Als de map niet bestaat, maakt u een map met de naam bin.

    mkdir bin
    
  11. Verplaats het terraform bestand naar de bin map.

    mv terraform bin/    
    
  12. Sluit Cloud Shell en start deze opnieuw.

  13. Controleer of de gedownloade versie van Terraform eerst in het pad staat.

    terraform version
    

4. Controleer het standaardAbonnement op Azure

Wanneer u zich aanmeldt bij Azure Portal met een Microsoft-account, wordt het standaard Azure-abonnement voor dat account gebruikt.

Terraform verifieert automatisch met behulp van gegevens uit het standaard Azure-abonnement.

Voer az account show uit om het huidige Microsoft-account en het Azure-abonnement te verifiëren.

az account show

Alle wijzigingen die u via Terraform aanbrengt, bevinden zich in het weergegeven Azure-abonnement. Als u dat wilt, slaat u de rest van dit artikel over.

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