Kom igång: Konfigurera Terraform i Azure Cloud Shell med Azure PowerShell

Terraform möjliggör definition, förhandsgranskning 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 ändringar i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du körningsplanen för att distribuera infrastrukturen.

Den här artikeln visar hur du kommer igång med Terraform på Azure med Cloud Shell och PowerShell.

I den här artikeln kan du se hur du:

  • Konfigurera Cloud Shell
  • Förstå vanliga Terraform- och Azure-autentiseringsscenarier
  • Autentisera via en Microsoft-konto från Cloud Shell (med Hjälp av 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. Öppna Cloud Shell

  1. Om du redan har Cloud Shell session öppen kan du gå vidare till nästa avsnitt.

  2. Gå till Azure-portalen

  3. Om det behövs loggar du in på din Azure-prenumeration och ändrar Azure-katalogen.

  4. Öppna Cloud Shell.

    Öppna Cloud Shell på den översta menyn i Azure Portal.

  5. Om du inte tidigare har använt Cloud Shell konfigurerar du miljö- och lagringsinställningarna.

  6. Välj kommandoradsmiljön.

    Välj det CLI som du vill använda i Cloud Shell.

3. Installera den senaste versionen av Terraform i Azure Cloud Shell

Cloud Shell uppdateras automatiskt till den senaste versionen av Terraform inom några veckor efter att den har släppts. Men om du behöver den senaste versionen tidigare visar följande steg hur du laddar ned och installerar den aktuella versionen av Terraform.

  1. Fastställ vilken version av Terraform som används i Cloud Shell.

    terraform version
    
  2. Om Terraform-versionen som Cloud Shell i inte är den senaste versionen visas ett meddelande om att Terraform-versionen är in date.

  3. Om det går bra att arbeta med den angivna versionen går du vidare till nästa avsnitt. Annars fortsätter du med följande steg.

  4. Bläddra till terraform-nedladdningssidan.

  5. Rulla ned till nedladdningslänkarna för Linux.

  6. Flytta musen över 64-bitarslänken. Det här är länken för den senaste 64-bitarsVersionen av Linux AMD, som är lämplig för Cloud Shell.

  7. Kopiera webbadressen.

  8. Kör curl och ersätt platshållaren med URL:en från föregående steg.

    curl -O <terraform_download_url>
    
  9. Packa upp filen.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Om katalogen inte finns skapar du en katalog med namnet bin .

    mkdir bin
    
  11. Flytta terraform filen till bin katalogen .

    mv terraform bin/    
    
  12. Kontrollera att den nedladdade versionen av Terraform är först i sökvägen.

    terraform version
    

4. Kontrollera Azure-standardprenumerationen

När du loggar in på Azure Portal med en Microsoft-konto används azure-standardprenumerationen för det kontot.

Terraform autentiserar automatiskt med hjälp av information från Azure-standardprenumerationen.

Kör az account show för att verifiera den aktuella Microsoft-konto och Azure-prenumerationen.

az account show

Alla ändringar du gör via Terraform kommer att vara mot den Azure-prenumeration som visas. Om det är vad du vill ha kan du hoppa över resten av den här artikeln.

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 Autentisering med Hjälp av Azure CLI.

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.

  1. Öppna en kommandorad som har åtkomst till Azure CLI.

  2. Kör az login utan några parametrar och följ anvisningarna för att logga in på Azure.

    az login
    

    Viktiga punkter:

    • Vid lyckad inloggning visas en lista över de Azure-prenumerationer som är associerade az login med den inloggade Microsoft-konto, inklusive standardprenumerationen.
  3. Bekräfta den aktuella Azure-prenumerationen genom att köra az account show.

    az account show
    
  4. Om 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 Table
    

    Viktiga punkter:

    • Ersätt <microsoft_account_email> platshållaren med den e 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 med live.com#admin@hotmail.com .
  5. 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.
    • Anrop az account set visar inte resultatet av växlingen till den angivna Azure-prenumerationen. Du kan dock använda för att az account show bekräfta att den aktuella Azure-prenumerationen har ändrats.
    • Om du kör kommandot az account list från föregående steg ser du att Azure-standardprenumerationen har ändrats till den prenumeration som du angav med az account set .

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 helt 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).

  1. Om du vill skapa ett huvudnamn för tjänsten loggar du in på Azure. När du har autentiserat till Azure via Microsoft-kontokan du gå tillbaka hit.

  2. Om du skapar ett huvudnamn för tjänsten från Git Bash anger du MSYS_NO_PATHCONV miljövariabeln . (Det här steget är inte nödvändigt om du använder Cloud Shell.)

    export MSYS_NO_PATHCONV=1    
    

    Viktiga punkter:

    • Du kan ange MSYS_NO_PATHCONV miljövariabeln globalt (för alla terminalsessioner) eller lokalt (bara för den aktuella sessionen). Eftersom det inte är så ofta du skapar 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 ~/.bashrc filen .
  3. 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 Contributor
    

    Viktiga 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-rbac visas flera värden. Värdena appIdpassword , och används i tenant nä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.

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 för Terraform via miljövariabler.

  1. Redigera filen ~/.bashrc genom 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>"
    
  2. Kör skriptet (eller dess ~/.bashrcsource ~/.bashrc förkortade . ~/.bashrc motsvarighet). Du kan också avsluta och öppna Cloud Shell för att skriptet ska köras automatiskt.

    . ~/.bashrc
    
  3. Nä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 från ett Terraform-skript: ${env.<environment_variable>} . Om du till exempel vill komma åt ARM_SUBSCRIPTION_ID vä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. Det här 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 SubA (bestäms via ) medan miljövariablerna pekar på SubB finns alla ändringar som görs av az account show Terraform på SubB. Därför skulle du behöva logga in på din prenumeration på underB 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

Nästa steg