Aan de slag: Installeer Terraform op 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 ( 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 wordt beschreven hoe u aan de slag gaat met Terraform in Azure met behulp van PowerShell.
In dit artikel leert u het volgende:
- Installeer de nieuwste versie van PowerShell
- De nieuwe Az-module van PowerShell installeren
- Azure-CLI installeren
- Terraform installeren
- 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. Installatie Azure PowerShell
De meest recente PowerShell-module die interactie met Azure-resources mogelijk maakt, wordt de az Azure PowerShell module genoemd. Wanneer u de Az Azure PowerShell 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.PSVersionInstalleer PowerShell. Deze demo is getest met Behulp van PowerShell 7.1.3 (x64) op Windows 10.
3. De Azure CLI installeren
Als u wilt dat Terraform wordt geverifieerd bij Azure,moet u de Azure CLI installeren. Deze demo is getest met Azure CLI versie 2.26.1.
4. Terraform installeren voor Windows
Download Terraform. Dit artikel is getest met terraform versie 1.0.3.
Extrahing het uitvoerbare bestand uit de download naar een map van uw keuze (bijvoorbeeld
c:\terraform).Werk het globale pad van uw systeem bij naar het uitvoerbare bestand.
Een terminalvenster openen.
Controleer de configuratie van het globale pad met de
terraformopdracht .terraform -version
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.
- Authenticeren via een Microsoft-account met Cloud Shell (met Bash of PowerShell) en
- Authenticeren via een Microsoft-account met Windows (met Bash of PowerShell)
- Authenticeren via een service-principal:
- Als u geen service-principal hebt, maakt u een service-principal.
- Verifiëren bij Azure met behulp van omgevingsvariabelen of verifiëren bij Azure met behulp van het Terraform-providerblok
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.
Open een opdrachtregel die toegang heeft tot de Azure CLI.
Voer az login uit zonder parameters en volg de instructies om u aan te melden bij Azure.
az loginBelangrijkste punten:
- Als de aanmelding is geslaagd, wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met
az logininbegrip van het standaardabonnement.
- Als de aanmelding is geslaagd, wordt een lijst weergegeven met de Azure-abonnementen die zijn gekoppeld aan de aangemelde Microsoft-account, met
Voer az account show uit om het huidige Azure-abonnement te bevestigen.
az account showAls 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 TableBelangrijkste 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.comvervangen doorlive.com#admin@hotmail.com.
- Vervang de
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 sethet aanroepen worden de resultaten van het overschakelen naar het opgegeven Azure-abonnement niet weergegeven. U kunt echter gebruiken omaz account showte 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 listu hebt opgegeven metaz account set.
- Vervang de
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).
Meld u aan bij Azure om een service-principal te maken. Nadat u zich bij Azure via een Microsoft-account,keert u hier terug.
Als u een service-principal maakt vanuit Git Bash, stelt u de
MSYS_NO_PATHCONVomgevingsvariabele in. (Deze stap is niet nodig als u Cloud Shell.)export MSYS_NO_PATHCONV=1Belangrijkste punten:
- U kunt de
MSYS_NO_PATHCONVomgevingsvariabele 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~/.bashrcbestand .
- U kunt de
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 ContributorBelangrijkste 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-rbacworden verschillende waarden weergegeven. DeappIdwaarden , en worden gebruikt in de volgendepasswordtenantstap. - 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.
- U kunt de
Referenties voor de service-principal opgeven in omgevingsvariabelen
Zodra u een service-principal hebt gemaakt, kunt u de referenties voor Terraform opgeven via omgevingsvariabelen.
Bewerk het
~/.bashrcbestand 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>"Als u het
~/.bashrcscript wilt uitvoeren, voert u uit (of hetsource ~/.bashrcverkorte equivalent. ~/.bashrcervan). U kunt het script ook afsluiten Cloud Shell opnieuw openen om het script automatisch uit te voeren.. ~/.bashrcZodra 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 vanuit een Terraform-script toegang te krijgen tot de waarde van een Azure-abonnement:
${env.<environment_variable>}. Als u bijvoorbeeld toegang wilt krijgen totARM_SUBSCRIPTION_IDde 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 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 showSubB 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