Terraform i Azure
Konfigurera AzureRM Terraform-providern, skriv en grundläggande infrastrukturplan och förstå när Terraform bör föredras framför inbyggda ARM-/Bicep-verktyg.
Terraform i Azure är en gratis lektion i Azure Fundamentals på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Azure Fundamentals, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Azure Fundamentals innehåller totalt 4 lektioner.
Vad är Terraform och varför Azure?
Terraform är ett verktyg för Infrastructure as Code med öppen källkod, utvecklat av HashiCorp. Till skillnad från Bicep är Terraform molnagnostiskt — en enda Terraform-kodbas kan samtidigt hantera resurser i Azure, AWS, GCP och många andra providers. I Azure använder Terraform providern AzureRM för att kommunicera med ARM API, vilket gör det till ett populärt val för organisationer med flera moln.
Terraform-providern AzureRM
AzureRM-providern är ett plugin som Terraform hämtar och använder för att översätta Terraform-konfiguration till anrop till ARM API. Den underhålls av HashiCorp och Microsoft och är det officiella sättet att hantera Azure-resurser med Terraform. Konfigurera providern med ert prenumerations-ID och autentiseringsmetod och kör sedan terraform init för att hämta den.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Terraform-filstruktur
Ett typiskt Azure Terraform-projekt är uppdelat i flera .tf-filer: main.tf innehåller resursdeklarationer, variables.tf definierar indatavariabler, outputs.tf definierar utdatavärden och terraform.tfvars tillhandahåller variabelvärden för en specifik miljö. Terraform läser automatiskt in alla .tf-filer i den aktuella katalogen, så uppdelningen i flera filer är enbart till för läsbarhet.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Deklarera Azure-resurser
I Terraform deklarerar ni Azure-resurser med resource-block. Blocktypen är resource, följd av AzureRM-resurstypen (till exempel 'azurerm_resource_group') och ett lokalt namn som används för att referera till resursen i konfigurationen. Egenskapsnamn i Terraform använder snake_case i stället för camelCase eller PascalCase, som används i ARM JSON.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}Terraform-arbetsflödet: Init, Plan, Apply
Det centrala Terraform-arbetsflödet består av tre steg. terraform init hämtar AzureRM-providern och konfigurerar backend. terraform plan jämför er konfiguration med det aktuella tillståndet och visar en diff över vad som kommer att skapas, ändras eller tas bort — ungefär som ARM:s what-if. terraform apply genomför planen och uppdaterar Azure så att miljön motsvarar er konfiguration.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyTerraform-tillstånd
Terraform underhåller en tillståndsfil (terraform.tfstate) som registrerar det aktuella tillståndet för alla hanterade resurser och kopplar dem till er konfiguration. Filen gör det möjligt för Terraform att upptäcka avvikelser mellan det som är konfigurerat och det som faktiskt finns i Azure. I teammiljöer bör ni lagra tillståndet på distans i ett Azure Storage Account (en Terraform-backend), så att alla teammedlemmar delar samma tillståndsfil.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Autentisering mot Azure i Terraform
Terraform stöder flera autentiseringsmetoder för Azure. Vid lokal utveckling använder ni az login (autentisering via Azure CLI) — Terraform hämtar automatiskt autentiseringsuppgifterna. I CI/CD-pipelines använder ni ett Service Principal med en klienthemlighet eller ett certifikat, som skickas via miljövariabler. För Azure-värdbaserade agenter eller virtuella datorer använder ni en Managed Identity för den säkraste autentiseringen utan hemligheter.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planTerraform-moduler för återanvändning
Precis som Bicep-moduler gör Terraform-moduler det möjligt att paketera och återanvända infrastrukturrmönster. En modul är en katalog som innehåller .tf-filer. Ni refererar till den med ett module-block, skickar indata via variables och använder utdata. Terraform Registry innehåller hundratals Azure-moduler från communityn och verifierade moduler som ni kan använda direkt, till exempel AzureRM-nätverksmodulen.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}När ska ni välja Terraform framför Bicep?
Välj Bicep när er organisation endast använder Azure och vill ha den tätaste integrationen med nya Azure-funktioner (Bicep får stöd för nya resurstyper redan första dagen). Välj Terraform när ni hanterar resurser hos flera molnleverantörer, behöver det stora ekosystemet av community-moduler eller föredrar HCL-syntax och HashiCorp-verktygskedjan. Båda är giltiga alternativ för distributioner som enbart använder Azure — organisationens preferenser blir ofta avgörande.
Importera befintliga resurser
Om resurser redan finns i Azure innan ni började använda Terraform kan ni införa dem under Terraform-hantering med terraform import. Kommandot hämtar resursens aktuella tillstånd och lägger till det i Terraform-tillståndsfilen. Efter importen måste ni manuellt skriva motsvarande konfigurationsblock så att det matchar den importerade resursen och sedan köra terraform plan för att bekräfta att det inte finns några skillnader.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Rekommenderade arbetssätt för Terraform i Azure
Följ dessa rekommenderade arbetssätt för Terraform i Azure: lagra tillståndet på distans i Azure Blob Storage med aktiverad tillståndslåsning, använd workspaces eller separata tillståndsfiler för olika miljöer, checka aldrig in hemligheter i källkodshanteringen — använd i stället Azure Key Vault-datakällor, lås provider-versionerna för att undvika inkompatibla ändringar och kör Terraform i en CI/CD-pipeline (Azure Pipelines eller GitHub Actions) med godkännandesteg för planerna.
Snabbkontroll
Testa era kunskaper om koncepten i Microsoft Azure Fundamentals (AZ-900) från den här lektionen.
Sammanfattning av lektionen
I den här lektionen har ni lärt er att Terraform är ett molnagnostiskt IaC-verktyg som använder AzureRM-providern för att hantera Azure-resurser, att arbetsflödet med init, plan och apply möjliggör säkra och förutsägbara distributioner samt att fjärrlagrat tillstånd i Azure Blob Storage är nödvändigt för teamsamarbete. Nästa steg är att skapa App Service-planer och Web Apps.
Lär dig Azure Fundamentals med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Terraform i Azure” gratis?
Ja – hela texten till ”Terraform i Azure” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Azure Fundamentals, kan Ni uppgradera till CoddyKit PRO. Kursen i Azure Fundamentals innehåller totalt 4 lektioner.
Vad lär jag mig i ”Terraform i Azure”?
Konfigurera AzureRM Terraform-providern, skriv en grundläggande infrastrukturplan och förstå när Terraform bör föredras framför inbyggda ARM-/Bicep-verktyg. Ni övar på Azure Fundamentals med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Azure Fundamentals?
Du behöver inga förkunskaper. Utbildningen i Azure Fundamentals på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Terraform i Azure”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Azure Fundamentals-lektionen?
Ja. Varje Azure Fundamentals-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.