Konfigurera Terraform i Azure Cloud Shell med Bash
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. 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 ändringarna 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 beskriver alternativen för att autentisera till Azure för användning med Terraform.
I den här artikeln kan du se hur du:
- Konfigurera Cloud Shell
- Visa aktuellt Azure-konto
- Förstå vanliga Scenarier för Terraform- och Azure-autentisering
- Autentisera via ett Microsoft-konto från Cloud Shell (med Bash eller PowerShell)
- Autentisera via ett Microsoft-konto från Windows (med 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
Om du redan har en Cloud Shell-session öppen kan du gå vidare till nästa avsnitt.
Gå till Azure-portalen
Om det behövs loggar du in på din Azure-prenumeration och ändrar Azure-katalogen.
Öppna Cloud Shell.
Om du inte tidigare har använt Cloud Shell konfigurerar du miljö- och lagringsinställningarna.
Välj kommandoradsmiljön.
3. Installera den senaste versionen av Terraform i Azure Cloud Shell
Cloud Shell uppdateras automatiskt till den senaste versionen av Terraform. Uppdateringarna kommer dock inom ett par veckor efter lanseringen. Den här artikeln visar hur du laddar ned och installerar den aktuella versionen av Terraform.
Fastställa vilken version av Terraform som används i Cloud Shell.
terraform version
Om Terraform-versionen som är installerad i Cloud Shell inte är den senaste versionen visas ett meddelande som anger att versionen av Terraform är inaktuell.
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.
Bläddra till sidan för Terraform-nedladdningar.
Rulla ned till linux-nedladdningslänkarna.
Flytta musen över 64-bitarslänken. Den här länken är för den senaste 64-bitars Linux AMD-versionen, som är lämplig för Cloud Shell.
Kopiera URL.
Kör
curl
och ersätt platshållaren med URL:en från föregående steg.curl -O <terraform_download_url>
Packa upp filen.
unzip <zip_file_downloaded_in_previous_step>
Om katalogen inte finns skapar du en katalog med namnet
bin
.mkdir bin
terraform
Flytta filen tillbin
katalogen.mv terraform bin/
Stäng och starta om Cloud Shell.
Kontrollera att den nedladdade versionen av Terraform är först i sökvägen.
terraform version
4. Verifiera standardprenumerationen för Azure
När du loggar in på Azure-portalen med ett Microsoft-konto används standardprenumerationen för det kontot.
Terraform autentiserar automatiskt med hjälp av information från standardprenumerationen i Azure.
Kör az account show för att verifiera det aktuella Microsoft-kontot och Azure-prenumerationen.
az account show
Alla ändringar du gör via Terraform finns i den azure-prenumeration som visas. Om det är vad du vill kan du hoppa över resten av den här artikeln.
5. Autentisera Terraform till Azure
Scenarier för Terraform- och Azure-autentisering
Terraform stöder endast autentisering till Azure via Azure CLI. Autentisering med Azure PowerShell stöds inte. Även om du kan använda Azure PowerShell-modulen när du utför ditt Terraform-arbete 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.
- Autentisera via ett Microsoft-konto med Cloud Shell (med Bash eller PowerShell)
- Autentisera via ett Microsoft-konto med Windows (med Bash eller PowerShell)
- Autentisera via tjänstens huvudnamn:
- 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övariabler eller autentisera till Azure med hjälp av Terraform-providerblocket
Autentisera till Azure via ett Microsoft-konto
Ett 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. Ett Microsoft-konto kan associeras med en eller flera Azure-prenumerationer, där en av dessa prenumerationer är standard.
Följande steg visar hur:
- Logga in på Azure interaktivt med ett Microsoft-konto
- Visa en lista över kontots associerade Azure-prenumerationer (inklusive standard)
- Ange 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 login
Viktiga punkter:
- Vid lyckad inloggning
az login
visar en lista över De Azure-prenumerationer som är associerade med det inloggade Microsoft-kontot, inklusive standardprenumerationen.
- Vid lyckad inloggning
Bekräfta den aktuella Azure-prenumerationen genom att köra az account show.
az account show
Om du vill visa alla Azure-prenumerationsnamn och ID:er för ett specifikt 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:
<microsoft_account_email>
Ersätt platshållaren med den Microsoft-konto-e-postadress vars Azure-prenumerationer du vill visa.- Med ett Live-konto , till exempel en Hotmail eller Outlook, kan du behöva ange den fullständigt kvalificerade e-postadressen. Om din e-postadress till exempel är
admin@hotmail.com
kan du behöva ersätta platshållaren medlive.com#admin@hotmail.com
.
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:
<subscription_id_or_subscription_name>
Ersätt platshållaren med ID:t eller namnet på den prenumeration som du vill använda.- Samtal
az account set
visar inte resultatet av att växla till den angivna Azure-prenumerationen. Du kan dock användaaz account show
för att bekräfta att den aktuella Azure-prenumerationen har ändrats. - Om du kör
az account list
kommandot från föregående steg ser du att standardprenumerationen för Azure har ändrats till den prenumeration som du angav medaz 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. I stället för att låta program logga in som en fullt privilegierad användare erbjuder Azure huvudkonton för tjänsten.
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 ett Microsoft-konto går du tillbaka hit.
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 något du gör ofta när 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.
- Du kan ange
Om du vill skapa ett huvudnamn för tjänsten kör du az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Viktiga punkter:
- Du kan ersätta
<service-principal-name>
med 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 du har slutfört
az ad sp create-for-rbac
det visar flera värden. VärdenaappId
,password
ochtenant
används i nästa steg. - Lösenordet kan inte hämtas om det går förlorat. 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 rollbaserad åtkomstkontroll (RBAC) finns i RBAC: Inbyggda roller.
- Utdata från att skapa 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 ett Huvudnamn för Azure-tjänsten med Azure CLI.
- Du kan ersätta
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.
~/.bashrc
Redigera filen 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>"
Kör skriptet genom att
~/.bashrc
körasource ~/.bashrc
(eller dess förkortade motsvarighet. ~/.bashrc
). Du kan också avsluta och öppna Cloud Shell igen för att skriptet ska köras automatiskt.. ~/.bashrc
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 inifrån ett Terraform-skript:
${env.<environment_variable>}
. Om du till exempel vill komma åt värdetARM_SUBSCRIPTION_ID
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. Nu ska vi 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
az account show
) medan miljövariablerna pekar på UnderB finns alla ändringar som görs av Terraform på underb. Därför skulle du behöva logga in på din underb-prenumeration för att köra Azure CLI-kommandon eller Azure PowerShell-kommandon för att visa dina ändringar.
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 dina autentiseringsuppgifter för Azure-prenumerationen i en Terraform-konfigurationsfil , särskilt när du testar. Det är dock inte lämpligt att lagra autentiseringsuppgifter i en klartextfil som kan visas av icke-betrodda personer.
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure
Nästa steg
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för