Terraform i Azure
Konfigurer AzureRM Terraform-provideren, skriv en enkel infrastrukturplan, og forstå når Terraform bør foretrekkes fremfor innebygde ARM-/Bicep-verktøy.
Terraform i Azure er en gratis leksjon i Azure Fundamentals på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Azure Fundamentals, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Azure Fundamentals inneholder totalt 4 leksjoner.
Hva er Terraform, og hvorfor Azure?
Terraform er et åpen kildekode-verktøy for Infrastructure as Code, utviklet av HashiCorp. I motsetning til Bicep er Terraform skyagnostisk — én Terraform-kodebase kan administrere ressurser på tvers av Azure, AWS, GCP og mange andre leverandører samtidig. På Azure bruker Terraform AzureRM-provider-en til å kommunisere med ARM API-et, noe som gjør Terraform til et populært valg for organisasjoner med flere skyleverandører.
Terraform-provider-en AzureRM
AzureRM-provider-en er en plugin som Terraform laster ned og bruker til å oversette Terraform-konfigurasjon til kall til ARM API-et. Den vedlikeholdes av HashiCorp og Microsoft og er den offisielle måten å administrere Azure-ressurser med Terraform på. Konfigurer provider-en med abonnements-ID-en og autentiseringsmetoden din, og kjør deretter terraform init for å laste den ned.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Filstruktur i Terraform
Et typisk Azure Terraform-prosjekt er delt inn i flere .tf-filer: main.tf inneholder ressursdeklarasjoner, variables.tf definerer inndatavariabler, outputs.tf definerer output-verdier, og terraform.tfvars angir variabelverdier for et bestemt miljø. Terraform laster automatisk inn alle .tf-filer i gjeldende katalog, så oppdelingen i flere filer er utelukkende av hensyn til lesbarheten.
# 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'
}Deklarere Azure-ressurser
I Terraform deklarerer du Azure-ressurser ved hjelp av resource-blokker. Blokktypen er resource, etterfulgt av AzureRM-ressurstypen (for eksempel 'azurerm_resource_group') og et lokalt navn som brukes til å referere til ressursen i konfigurasjonen. Egenskapsnavn i Terraform bruker snake_case i stedet for camelCase eller PascalCase, som brukes 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-arbeidsflyten: Init, Plan, Apply
Den sentrale Terraform-arbeidsflyten består av tre trinn. terraform init laster ned AzureRM-provider-en og konfigurerer backend-en. terraform plan sammenligner konfigurasjonen din med gjeldende tilstand og viser en diff over hva som skal opprettes, endres eller slettes — omtrent som what-if i ARM. terraform apply utfører planen og oppdaterer Azure slik at konfigurasjonen samsvarer.
# 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-tilstand
Terraform vedlikeholder en tilstandsfil (terraform.tfstate) som registrerer gjeldende tilstand for alle administrerte ressurser og knytter dem til konfigurasjonen din. Denne filen gjør det mulig for Terraform å oppdage avvik mellom det som er konfigurert, og det som faktisk finnes i Azure. I teammiljøer bør du lagre tilstanden eksternt i en Azure Storage Account (en Terraform-backend), slik at alle teammedlemmer deler den samme tilstandsfilen.
# 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øtter flere autentiseringsmetoder for Azure. Under lokal utvikling kan du bruke az login (autentisering med Azure CLI) — Terraform henter legitimasjonen automatisk. I CI/CD-pipelines kan du bruke en Service Principal med en klienthemmelighet eller et sertifikat, sendt inn via miljøvariabler. For Azure-baserte agenter eller virtuelle maskiner bør du bruke en Managed Identity for den sikreste autentiseringen uten hemmeligheter.
# 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 for gjenbruk
I likhet med Bicep-moduler lar Terraform-moduler deg pakke inn og gjenbruke infrastrukturmønstre. En modul er en katalog som inneholder .tf-filer. Du refererer til den med en module-blokk, sender inn verdier via variables og bruker outputs. Terraform Registry inneholder hundrevis av Azure-moduler fra fellesskapet og verifiserte moduler som du kan bruke direkte, for eksempel AzureRM-nettverksmodulen.
# 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 bør du velge Terraform fremfor Bicep?
Velg Bicep når organisasjonen din bare bruker Azure og ønsker tettest mulig integrasjon med nye Azure-funksjoner (Bicep får støtte for nye ressurstyper fra første dag). Velg Terraform når du administrerer ressurser på tvers av flere skyleverandører, trenger det store økosystemet av moduler fra fellesskapet, eller foretrekker HCL-syntaks og HashiCorp-verktøykjeden. Begge er gode valg for rene Azure-distribusjoner — organisasjonens preferanser avgjør ofte.
Importere eksisterende ressurser
Hvis ressurser allerede finnes i Azure før du begynte å bruke Terraform, kan du legge dem under Terraform-administrasjon med terraform import. Denne kommandoen henter ressursens gjeldende tilstand og legger den til i Terraform-tilstandsfilen. Etter importen må du manuelt skrive den tilsvarende konfigurasjonsblokken slik at den samsvarer med den importerte ressursen, og deretter kjøre terraform plan for å bekrefte at det ikke finnes forskjeller.
# 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'
}Anbefalte fremgangsmåter for Terraform på Azure
Følg disse anbefalte fremgangsmåtene for Terraform på Azure: lagre tilstanden eksternt i Azure Blob Storage med aktivert tilstandslåsing, bruk workspaces eller separate tilstandsfiler for ulike miljøer, legg aldri hemmeligheter inn i kildekontrollen — bruk datakilder fra Azure Key Vault i stedet, lås provider-versjonene for å unngå brytende endringer, og kjør Terraform i en CI/CD-pipeline (Azure Pipelines eller GitHub Actions) med godkjenningsporter for planer.
Hurtigsjekk
Test forståelsen din av Microsoft Azure Fundamentals-konsepter (AZ-900) fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte du at Terraform er et skyagnostisk IaC-verktøy som bruker AzureRM-provider-en til å administrere Azure-ressurser, at arbeidsflyten med init, plan, apply muliggjør sikre og forutsigbare distribusjoner, og at ekstern tilstand i Azure Blob Storage er avgjørende for samarbeid i team. Neste tema er å opprette App Service-planer og Web Apps.
Lær deg Azure Fundamentals med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Terraform i Azure» gratis?
Ja – hele teksten i «Terraform i Azure» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Azure Fundamentals-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Azure Fundamentals inneholder totalt 4 leksjoner.
Hva lærer jeg i «Terraform i Azure»?
Konfigurer AzureRM Terraform-provideren, skriv en enkel infrastrukturplan, og forstå når Terraform bør foretrekkes fremfor innebygde ARM-/Bicep-verktøy. Du øver på Azure Fundamentals med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Azure Fundamentals?
Ingen tidligere erfaring er nødvendig. Azure Fundamentals på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Terraform i Azure»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Azure Fundamentals-leksjonen?
Ja. Alle Azure Fundamentals-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.