Aan de slag: Terraform configureren in Azure Cloud Shell met Bash

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 ( zoals Azure) en de elementen waaruit uw cloudinfrastructuur bestaat, opgeven. Nadat u uw configuratiebestanden hebt gemaakt, maakt u een uitvoeringsplan waarmee u een voorbeeld van de wijzigingen in uw infrastructuur kunt bekijken voordat ze worden geïmplementeerd. Nadat u de wijzigingen hebt gecontroleerd, moet u het uitvoeringsplan toepassen om de infrastructuur te implementeren.

In dit artikel vindt u de opties voor verificatie bij Azure voor gebruik met Terraform.

In dit artikel leert u het volgende:

  • Een Cloud Shell
  • Huidig Azure-account weergeven
  • Algemene terraform- en Azure-verificatiescenario's begrijpen
  • Verifiëren via een Microsoft-account van Cloud Shell (met behulp van Bash of PowerShell)
  • Verifiëren via een Microsoft-account van Windows (met behulp van Bash of PowerShell)
  • Een service-principal maken met 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, maak dan een gratis account aan voordat u begint.

2. Open Cloud Shell

  1. Als u al een Cloud Shell geopend, kunt u naar de volgende sectie gaan.

  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 in het bovenste menu in het Azure Portal.

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

  6. Selecteer de opdrachtregelomgeving.

    Selecteer de CLI die u wilt gebruiken in Cloud Shell.

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

Cloud Shell enkele weken na de release automatisch bijgewerkt naar de nieuwste versie van Terraform. Als u echter eerder de meest recente versie nodig hebt, laten de volgende stappen zien hoe u de huidige versie van Terraform kunt downloaden en installeren.

  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 dat aangeeft dat de versie van Terraform verouderd is.

  3. Als u goed werkt met de aangegeven versie, 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 Linux-downloadkoppelingen.

  6. Beweeg de muis over de 64-bits koppeling. Dit is de koppeling voor de meest recente 64-bits Linux AMD-versie, die geschikt is voor Cloud Shell.

  7. Kopieer de URL.

  8. Voer curl 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 map bin .

    mv terraform bin/    
    
  12. Controleer of de gedownloade versie van Terraform als eerste in het pad staat.

    terraform version
    

4. Het standaard Azure-abonnement controleren

Wanneer u zich bij de 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 de huidige Microsoft-account en het Azure-abonnement te controleren.

az account show

Wijzigingen die u via Terraform aanmaakt, worden in strijd met 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 de authenticatie bij Azure via de Azure CLI. Authenticeren met Azure PowerShell wordt niet ondersteund. Hoewel u de module Azure PowerShell gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich dus 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 Authenticating using the Azure CLI(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-mailbericht 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, en een van deze abonnementen is de standaardinstelling.

In de volgende stappen ziet u hoe u zich interactief aanmeldt bij Azure met behulp van een Microsoft-account, de gekoppelde Azure-abonnementen van het account vermeldt (inclusief de standaardinstelling) en het huidige abonnement in stelt.

  1. Open een opdrachtregel die toegang heeft tot de Azure CLI.

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

    az login
    

    Belangrijkste punten:

    • Als de aanmelding is geslaagd, wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met az login inbegrip van 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 specifieke Microsoft-account wilt weergeven, moet u az account list uitvoeren.

    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 Microsoft-account mailadres waarvan u de Azure-abonnementen wilt toevoegen.
    • Met een Live-account, zoals een hotmail of outlook, moet u mogelijk het volledig gekwalificeerde e-mailadres opgeven. Als uw e-mailadres bijvoorbeeld is, moet u de tijdelijke aanduiding mogelijk admin@hotmail.com vervangen door live.com#admin@hotmail.com .
  5. Voer az account set uit om een specifiek Azure-abonnement te gebruiken.

    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 az account set het aanroepen worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruiken om az account show te bevestigen dat het huidige Azure-abonnement is gewijzigd.
    • Als u de opdracht uit de vorige stap hebt uitgevoerd, ziet u dat het standaard Azure-abonnement is gewijzigd in het abonnement dat az account list u hebt opgegeven met az account set .

Een service-principal maken

Geautomatiseerde hulpprogramma's die Azure-services implementeren of gebruiken, zoals Terraform, moeten altijd beperkte machtigingen hebben. In plaats van dat toepassingen zich aanmelden als een gebruiker met volledige bevoegdheden, 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 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.)

    export MSYS_NO_PATHCONV=1    
    

    Belangrijkste punten:

    • U kunt de MSYS_NO_PATHCONV omgevingsvariabele globaal instellen (voor alle terminalsessies) of lokaal (voor alleen de huidige sessie). Omdat het maken van een service-principal niet iets is wat u vaak doet, 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
    

    Belangrijkste punten:

    • U kunt de <service-principal-name> vervangen door een aangepaste naam voor uw omgeving of de parameter volledig weglaten. Als u de parameter weglaten, wordt de naam van de service-principal gegenereerd op basis van de huidige datum en tijd.
    • Als de uitvoering is voltooid, az ad sp create-for-rbac worden verschillende waarden weergegeven. De appId waarden , en worden gebruikt in de volgende passwordtenant stap.
    • Het wachtwoord kan niet worden opgehaald als dit verloren gaat. Als zodanig moet u uw wachtwoord op een veilige plaats opslaan. 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 Role-Based Access Control (RBAC) en rollen.
    • De uitvoer van het maken van de service-principal bevat gevoelige referenties. Zorg ervoor dat u deze referenties niet in uw code op neem of controleer de referenties in uw broncodebeheer.
    • Zie het artikel Een Azure-service-principalmaken 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. Voer uit (of het verkorte equivalent ervan) om het ~/.bashrcsource ~/.bashrc script uit te . ~/.bashrc voeren. U kunt het script ook afsluiten Cloud Shell opnieuw openen om het script automatisch uit te voeren.

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

    printenv | grep ^ARM*
    

Belangrijkste punten:

  • Net als bij elke omgevingsvariabele gebruikt u de volgende syntaxis om vanuit een Terraform-script toegang te krijgen tot de waarde van een Azure-abonnement: ${env.<environment_variable>} . Als u bijvoorbeeld toegang wilt krijgen tot ARM_SUBSCRIPTION_ID de waarde, geeft u ${env.ARM_SUBSCRIPTION_ID} op.
  • Als u Terraform-uitvoeringsplannen maakt en toe passen, 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 naar een tweede Azure-abonnement wijzen. Laten we het volgende voorbeeld eens bekijken om dit uit te leggen. Stel dat u twee Azure-abonnementen hebt: SubA en SubB. Als het huidige Azure-abonnement SubA is (bepaald via ) terwijl de omgevingsvariabelen naar SubB wijzen, worden alle wijzigingen die door Terraform zijn aangebracht, op az account show SubB uitgevoerd. Daarom moet u zich aanmelden bij uw SubB-abonnement om Azure CLI-opdrachten uit te voeren of om Azure PowerShell om uw wijzigingen weer te geven.

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

Het blok Azure-provider definieert de 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

Waarschuwing

De mogelijkheid om uw Azure-abonnementsreferenties op te geven in een Terraform-configuratiebestand kan handig zijn, met name bij het testen. Het wordt echter niet aangeraden 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 bij het gebruik van Terraform in Azure oplossen

Volgende stappen