Kom igång: Installera Terraform på Windows med Bash
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntaxen. Med HCL-syntaxen kan du ange molnleverantören, till exempel Azure, och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska dina infrastrukturändringar innan de distribueras. När du har verifierat ändringarna tillämpar du körningsplanen för att distribuera infrastrukturen.
Den här artikeln ger dig alternativ för att autentisera till Azure för användning med Terraform.
I den här artikeln kan du se hur du:
- Installera Git Bash-terminalemulatorn
- Installera Azure CLI
- Installera Terraform
- Konfigurera din miljö för att köra Terraform på Windows
- Förstå vanliga Terraform- och Azure-autentiseringsscenarier
- Autentisera via en Microsoft-konto från Cloud Shell (med Bash eller PowerShell)
- Autentisera via en Microsoft-konto från Windows (med Hjälp av Bash eller PowerShell)
- Skapa ett huvudnamn för tjänsten med hjälp av Azure CLI
- Skapa ett huvudnamn för tjänsten med hjälp av Azure PowerShell
- Ange autentiseringsuppgifter för tjänstens huvudnamn i miljövariabler
- Ange autentiseringsuppgifter för tjänstens huvudnamn i ett Terraform-providerblock
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
2. Installera en terminalemulator
Det finns många alternativ Windows att köra bash-kommandon, inklusive Git Bash och Windows-terminal. Den här artikeln har testats med hjälp av Git Bash. Ladda ned och installera Git Bash.
3. Installera Azure CLI
Installera Azure CLI. Den här artikeln har testats med Azure CLI version 2.26.1.
4. Installera Terraform för Windows
Ladda ned Terraform. Den här artikeln har testats med Terraform version 1.0.3.
Från nedladdningen extraherar du den körbara filen till en katalog som du väljer (till exempel
c:\terraform).Uppdatera systemets globala sökväg till den körbara filen.
Öppna ett terminalfönster.
Verifiera konfigurationen av den globala sökvägen med
terraformkommandot .terraform -version
5. Autentisera Terraform till Azure
Terraform- och Azure-autentiseringsscenarier
Terraform stöder endast autentisering till Azure via Azure CLI. Autentisering med Azure PowerShell stöds inte. Även om du kan använda modulen Azure PowerShell när du utför terraform-arbetet måste du därför först autentisera till Azure med hjälp av Azure CLI.
Den här artikeln beskriver hur du autentiserar Terraform till Azure för följande scenarier. Mer information om alternativ för att autentisera Terraform till Azure finns i Autentisera med hjälp av Azure CLI.
- Autentisering via en Microsoft-konto med Cloud Shell (med Bash eller PowerShell) och
- Autentisera via en Microsoft-konto med Windows (med Bash eller PowerShell)
- Autentisera via ett huvudnamn för tjänsten:
- Om du inte har ett huvudnamn för tjänsten skapar du ett huvudnamn för tjänsten.
- Autentisera till Azure med hjälp av miljövariablereller autentisera till Azure med Terraform-providerblocket
Autentisera till Azure via en Microsoft-konto
En Microsoft-konto är ett användarnamn (associerat med ett e-postmeddelande och dess autentiseringsuppgifter) som används för att logga in på Microsoft-tjänster , till exempel Azure. En Microsoft-konto kan associeras med en eller flera Azure-prenumerationer, där en av dessa prenumerationer är standardprenumerationer.
Följande steg visar hur du loggar in på Azure interaktivt med en Microsoft-konto, listar kontots associerade Azure-prenumerationer (inklusive standard) och anger den aktuella prenumerationen.
Öppna en kommandorad som har åtkomst till Azure CLI.
Kör az login utan några parametrar och följ anvisningarna för att logga in på Azure.
az loginViktiga punkter:
- Vid lyckad inloggning visas en lista över de Azure-prenumerationer som är associerade
az loginmed den inloggade Microsoft-konto, inklusive standardprenumerationen.
- Vid lyckad inloggning visas en lista över de Azure-prenumerationer som är associerade
Bekräfta den aktuella Azure-prenumerationen genom att köra az account show.
az account showOm du vill visa alla Azure-prenumerationsnamn och -ID för en Microsoft-konto kör du az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output TableViktiga punkter:
- Ersätt
<microsoft_account_email>platshållaren med den Microsoft-konto-postadress vars Azure-prenumerationer du vill visa. - Med ett Live-konto, till exempel hotmail eller outlook, kan du behöva ange den fullständigt kvalificerade e-postadressen. Om din e-postadress till exempel
admin@hotmail.comär kan du behöva ersätta platshållaren medlive.com#admin@hotmail.com.
- Ersätt
Om du vill använda en specifik Azure-prenumeration kör du az account set.
az account set --subscription "<subscription_id_or_subscription_name>"Viktiga punkter:
- Ersätt
<subscription_id_or_subscription_name>platshållaren med ID:t eller namnet på den prenumeration som du vill använda. - När
az account setdu anropar visas inte resultatet av växlingen till den angivna Azure-prenumerationen. Du kan dock använda för attaz account showbekräfta att den aktuella Azure-prenumerationen har ändrats. - Om du kör kommandot från föregående steg ser du att
az account listAzure-standardprenumerationen har ändrats till den prenumeration som du angav medaz account set.
- Ersätt
Skapa ett huvudnamn för tjänsten
Automatiserade verktyg som distribuerar eller använder Azure-tjänster , till exempel Terraform, bör alltid ha begränsade behörigheter. Azure erbjuder tjänstens huvudnamn i stället för att program loggar in som en fullständigt privilegierad användare.
Det vanligaste mönstret är att interaktivt logga in på Azure, skapa ett huvudnamn för tjänsten, testa tjänstens huvudnamn och sedan använda tjänstens huvudnamn för framtida autentisering (antingen interaktivt eller från dina skript).
Logga in på Azure för att skapa ett huvudnamn för tjänsten. När du har autentiserat till Azure via Microsoft-kontokan du gå tillbaka hit.
Om du skapar ett huvudnamn för tjänsten från Git Bash anger du
MSYS_NO_PATHCONVmiljövariabeln. (Det här steget är inte nödvändigt om du använder Cloud Shell.)export MSYS_NO_PATHCONV=1Viktiga punkter:
- Du kan ange
MSYS_NO_PATHCONVmiljövariabeln globalt (för alla terminalsessioner) eller lokalt (endast för den aktuella sessionen). Eftersom det inte är något du gör ofta att skapa ett huvudnamn för tjänsten anger exemplet värdet för den aktuella sessionen. Om du vill ange den här miljövariabeln globalt lägger du till inställningen i~/.bashrcfilen.
- Du kan ange
Skapa ett huvudnamn för tjänsten genom att köra az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role ContributorViktiga punkter:
- Du kan ersätta med
<service-principal-name>ett anpassat namn för din miljö eller utelämna parametern helt. Om du utelämnar parametern genereras tjänstens huvudnamn baserat på aktuellt datum och tid. - När slutförandet är klart
az ad sp create-for-rbacvisas flera värden. VärdenaappIdpassword, och används itenantnästa steg. - Lösenordet kan inte hämtas om det förloras. Därför bör du lagra ditt lösenord på en säker plats. Om du glömmer lösenordet kan du återställa autentiseringsuppgifterna för tjänstens huvudnamn.
- I den här artikeln används ett huvudnamn för tjänsten med rollen Deltagare. Mer information om Role-Based Access Control (RBAC) och roller finns i RBAC: Inbyggda roller.
- Utdata från skapandet av tjänstens huvudnamn innehåller känsliga autentiseringsuppgifter. Se till att du inte inkluderar dessa autentiseringsuppgifter i koden eller kontrollera autentiseringsuppgifterna i källkontrollen.
- Mer information om alternativ när du skapar ett huvudnamn för tjänsten med Azure CLI finns i artikeln Skapa tjänstens huvudnamn för Azure med Azure CLI.
- Du kan ersätta med
Ange autentiseringsuppgifter för tjänstens huvudnamn i miljövariabler
När du har skapat ett huvudnamn för tjänsten kan du ange dess autentiseringsuppgifter till Terraform via miljövariabler.
Redigera filen
~/.bashrcgenom att lägga till följande miljövariabler.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>"Om du vill
~/.bashrcköra skriptet kör dusource ~/.bashrc(eller dess förkortade motsvarande. ~/.bashrc). Du kan också avsluta och öppna Cloud Shell för att skriptet ska köras automatiskt.. ~/.bashrcNär miljövariablerna har angetts kan du verifiera deras värden på följande sätt:
printenv | grep ^ARM*
Viktiga punkter:
- Precis som med alla miljövariabler använder du följande syntax för att komma åt ett Azure-prenumerationsvärde inifrån ett Terraform-skript:
${env.<environment_variable>}. Om du till exempel vill komma åtARM_SUBSCRIPTION_IDvärdet anger du${env.ARM_SUBSCRIPTION_ID}. - När du skapar och tillämpar Terraform-körningsplaner ändras den Azure-prenumeration som är associerad med tjänstens huvudnamn. Detta kan ibland vara förvirrande om du är inloggad i en Azure-prenumeration och miljövariablerna pekar på en andra Azure-prenumeration. Låt oss titta på följande exempel för att förklara. Anta att du har två Azure-prenumerationer: SubA och SubB. Om den aktuella Azure-prenumerationen är UnderA (bestäms via ) medan miljövariablerna pekar på SubB finns alla ändringar som görs av
az account showTerraform på SubB. Därför måste du logga in på prenumerationen på underbhandsfilen för att köra Azure CLI-kommandon eller Azure PowerShell-kommandon för att visa ändringarna.
Ange autentiseringsuppgifter för tjänstens huvudnamn i ett Terraform-providerblock
Azure-providerblocket definierar syntax som gör att du kan ange autentiseringsinformation för din Azure-prenumeration.
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
Varning
Det kan vara praktiskt att ange autentiseringsuppgifterna för din Azure-prenumeration i en Terraform-konfigurationsfil – särskilt vid testning. Det är dock inte lämpligt att lagra autentiseringsuppgifter i en klartextfil som kan visas av icke-betrodda personer.
Felsöka Terraform på Azure
Felsöka vanliga problem när du använder Terraform på Azure