Azure Fundamentals · Lektion

Terraform i Azure

Konfigurér AzureRM Terraform-provideren, skriv en grundlæggende infrastrukturplan, og forstå, hvornår Terraform bør foretrækkes frem for de oprindelige ARM-/Bicep-værktøjer.

Lektion 4 af 413 trin

Terraform i Azure er en gratis Azure Fundamentals-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Azure Fundamentals, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Azure Fundamentals-kurset indeholder 4 lektioner i alt.

Hvad er Terraform, og hvorfor Azure?

Terraform er et open source-værktøj til Infrastructure as Code, udviklet af HashiCorp. I modsætning til Bicep er Terraform cloud-uafhængigt — en enkelt Terraform-kodebase kan administrere ressourcer på Azure, AWS, GCP og mange andre udbydere samtidig. På Azure bruger Terraform AzureRM-provideren til at kommunikere med ARM API'et, hvilket gør det til et populært valg for organisationer med flere clouds.

Terraform-provideren AzureRM

AzureRM-provideren er et plugin, som Terraform downloader og bruger til at oversætte Terraform-konfiguration til ARM API-kald. Den vedligeholdes af HashiCorp og Microsoft og er den officielle måde at administrere Azure-ressourcer med Terraform på. Konfigurer provideren med dit abonnements-ID og din godkendelsesmetode, og kør derefter terraform init for at downloade 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

Et typisk Azure Terraform-projekt er opdelt i flere .tf-filer: main.tf indeholder ressourceerklæringer, variables.tf definerer inputvariabler, outputs.tf definerer outputværdier, og terraform.tfvars angiver variable værdier for et bestemt miljø. Terraform indlæser automatisk alle .tf-filer i den aktuelle mappe, så opdelingen i flere filer er udelukkende af hensyn til læsbarheden.

# 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'
}

Erklæring af Azure-ressourcer

I Terraform erklærer du Azure-ressourcer ved hjælp af resource-blokke. Bloktypen er resource, efterfulgt af AzureRM-ressourcetypen (f.eks. 'azurerm_resource_group') og et lokalt navn, som bruges til at referere til ressourcen i konfigurationen. Egenskabsnavne i Terraform bruger snake_case i stedet for camelCase eller PascalCase, som bruges 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-arbejdsgangen: Init, Plan, Apply

Den centrale Terraform-arbejdsgang består af tre trin. terraform init downloader AzureRM-provideren og konfigurerer backend'en. terraform plan sammenligner din konfiguration med den aktuelle tilstand og viser en forskeloversigt over det, der bliver oprettet, ændret eller slettet — på samme måde som ARM's what-if. terraform apply udfører planen og opdaterer Azure, så den stemmer overens med din 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 destroy

Terraform-tilstand

Terraform vedligeholder en tilstandsfil (terraform.tfstate), der registrerer den aktuelle tilstand for alle administrerede ressourcer og knytter dem til din konfiguration. Denne fil gør det muligt for Terraform at registrere afvigelser mellem det konfigurerede og det, der findes i Azure. I teammiljøer bør du gemme tilstanden eksternt i en Azure Storage Account (en Terraform-backend), så alle teammedlemmer deler den samme tilstandsfil.

# 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'
  }
}

Godkendelse til Azure i Terraform

Terraform understøtter flere godkendelsesmetoder til Azure. Under lokal udvikling kan du bruge az login (godkendelse via Azure CLI) — Terraform henter automatisk legitimationsoplysningerne. I CI/CD-pipelines skal du bruge en Service Principal med en klienthemmelighed eller et certifikat, som sendes via miljøvariable. Til Azure-hostede agenter eller VM'er skal du bruge en Managed Identity for at opnå den sikreste godkendelse uden hemmeligheder.

# 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 plan

Terraform-moduler til genbrug

Ligesom Bicep-moduler gør Terraform-moduler det muligt at pakke og genbruge infrastrukturmønstre. Et modul er en mappe, der indeholder .tf-filer. Du refererer til det med en module-blok, sender input via variables og bruger outputs. Terraform Registry indeholder hundredvis af Azure-moduler fra fællesskabet samt verificerede moduler, som du kan bruge direkte, f.eks. AzureRM-netværksmodulet.

# 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']
}

Hvornår skal du vælge Terraform frem for Bicep?

Vælg Bicep, når din organisation kun bruger Azure og ønsker den tættest mulige integration med nye Azure-funktioner (Bicep får understøttelse af nye ressourcetyper fra dag ét). Vælg Terraform, når du administrerer ressourcer på tværs af flere cloududbydere, har brug for det store økosystem af moduler fra fællesskabet eller foretrækker HCL-syntaks og HashiCorp-værktøjskæden. Begge er gyldige til udrulninger, der kun bruger Azure — ofte er det organisationens præference, der afgør valget.

Import af eksisterende ressourcer

Hvis ressourcer allerede findes i Azure, før du begyndte at bruge Terraform, kan du overtage administrationen af dem med Terraform ved hjælp af terraform import. Denne kommando henter ressourcens aktuelle tilstand og føjer den til Terraform-tilstandsfilen. Efter importen skal du manuelt skrive den tilsvarende konfigurationsblok, så den stemmer overens med den importerede ressource, og derefter køre terraform plan for at bekræfte, at der ikke er nogen forskelle.

# 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'
}

Bedste praksis for Terraform på Azure

Følg denne bedste praksis for Terraform på Azure: gem tilstanden eksternt i Azure Blob Storage med aktiveret låsning af tilstanden, brug workspaces eller separate tilstandsfiler til forskellige miljøer, gem aldrig hemmeligheder i kildekodestyring — brug i stedet Azure Key Vault-datakilder, fastlås providerversioner for at undgå inkompatible ændringer, og kør Terraform i en CI/CD-pipeline (Azure Pipelines eller GitHub Actions) med godkendelsestrin for planer.

Hurtig kontrol

Test din forståelse af Microsoft Azure Fundamentals-konceptet (AZ-900) fra denne lektion.

Opsummering af lektionen

I denne lektion lærte du, at Terraform er et cloud-uafhængigt IaC-værktøj, der bruger AzureRM-provideren til at administrere Azure-ressourcer, at arbejdsgangen med init, plan og apply muliggør sikre og forudsigelige udrulninger, og at ekstern tilstand i Azure Blob Storage er afgørende for samarbejde i teamet. Dernæst ser vi på oprettelse af App Service-planer og webapps.

Gratis at komme i gang

Lær Azure Fundamentals med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Terraform i Azure” gratis?

Ja — hele teksten til “Terraform i Azure” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Azure Fundamentals-kurset, skal du opgradere til CoddyKit PRO. Azure Fundamentals-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Terraform i Azure”?

Konfigurér AzureRM Terraform-provideren, skriv en grundlæggende infrastrukturplan, og forstå, hvornår Terraform bør foretrækkes frem for de oprindelige ARM-/Bicep-værktøjer. Du øver dig i Azure Fundamentals med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Azure Fundamentals?

Der kræves ingen tidligere erfaring. Azure Fundamentals på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Terraform i Azure”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Azure Fundamentals-lektion?

Ja. Alle Azure Fundamentals-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Sådan fungerer Azure Resource Manager
  2. Skrivning af ARM-skabeloner
  3. Bicep: moderne Azure-IaC
  4. Terraform i Azure
← Tilbage til Azure Fundamentals