DevOps-bootcamp · Lektion

Villkorsuttryck och splat-uttryck

Implementera villkorslogik i era konfigurationer med ternära operatorer och förstå splat-uttryck för att omforma listor med objekt.

Lektion 3 av 411 steg

Villkorsuttryck och splat-uttryck är en gratis lektion i DevOps-bootcamp på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för DevOps-bootcamp, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Dynamisk logik i Terraform

Terraform handlar inte bara om statiska deklarationer! För att göra dina infrastrukturkonfigurationer smartare och mer anpassningsbara använder vi dynamisk logik.

I den här lektionen introduceras två kraftfulla verktyg: villkorsuttryck och splat-uttryck. De hjälper infrastrukturen att anpassa sig efter olika situationer och att effektivt transformera data.

Villkorsuttryck: grunderna

Villkorsuttryck, som ofta kallas ternära operatorer, låter dig välja ett av två värden beroende på om ett villkor är sant eller falskt. Det fungerar ungefär som en enkel 'if-else'-sats för värden.

  • Syntax: condition ? value_if_true : value_if_false
  • De är utmärkta för att göra konfigurationer flexibla och återanvändbara samt anpassa dem till olika miljöer eller inställningar.

Villkor: exempel med ett enkelt värde

Nu ser vi hur ett villkorsuttryck dynamiskt kan ange värdet för en lokal variabel baserat på en inmatningsvariabel. Prova att ändra default = "dev" till default = "prod" och köra igen.

variable "env" {
  description = "Deployment environment (dev or prod)"
  type        = string
  default     = "dev"
}

locals {
  instance_type = var.env == "prod" ? "t3.medium" : "t3.micro"
}

output "chosen_instance_type" {
  value = local.instance_type
  description = "The instance type selected based on environment."
}

Villkor: exempel med ett resursattribut

Du kan också använda villkor för att styra resursattribut, och till och med för att avgöra om en resurs ska skapas över huvud taget! Här skapar vi villkorligt en S3-bucket med metaargumentet count.

variable "create_bucket" {
  description = "Whether to create an S3 bucket"
  type        = bool
  default     = true
}

resource "aws_s3_bucket" "my_bucket" {
  # If create_bucket is true, count is 1 (create one bucket).
  # If create_bucket is false, count is 0 (create no buckets).
  count  = var.create_bucket ? 1 : 0
  bucket = "coddykit-unique-bucket-12345" # IMPORTANT: Replace with a globally unique name!
  acl    = "private"
}

output "bucket_id" {
  value = var.create_bucket ? aws_s3_bucket.my_bucket[0].id : "No bucket created"
  description = "The ID of the created S3 bucket, or a message if not created."
}

Förstå splat-uttryck

Splat-uttryck ([*]) används för att omvandla en lista med objekt till en lista med specifika attribut från dessa objekt. Det är en kraftfull genväg för att extrahera data från flera objekt samtidigt.

  • Syntax: LIST_OF_OBJECTS[*].ATTRIBUTE
  • De förenklar arbete med samlingar, till exempel flera resurser som skapats med count eller komplexa listvariabler.

Splat: exempel med resursutdata

Föreställ dig att du skapar flera EC2-instanser. Hur får du enkelt en lista över alla deras publika IP-adresser? Splat-uttryck passar perfekt för detta! Obs: Du behöver en giltig AMI för din AWS-region.

resource "aws_instance" "web" {
  count         = 2 # Creates two instances
  ami           = "ami-0abcdef1234567890" # Replace with a valid AMI ID for your region
  instance_type = "t2.micro"
  tags = {
    Name = "web-instance-${count.index}"
  }
}

output "web_instance_public_ips" {
  value = aws_instance.web[*].public_ip
  description = "A list of public IP addresses for all web instances."
}

Splat: exempel med variabellistor

Splat-uttryck är inte bara till för resurser; de fungerar också utmärkt med komplexa variabler. Här har vi en lista med användarobjekt och vill extrahera endast deras e-postadresser.

variable "users" {
  description = "List of user objects, each with name, email, and role."
  type = list(object({
    name  = string
    email = string
    role  = string
  }))
  default = [
    { name = "Alice", email = "alice@example.com", role = "admin" },
    { name = "Bob", email = "bob@example.com", role = "viewer" },
    { name = "Charlie", email = "charlie@example.com", role = "editor" }
  ]
}

output "user_emails" {
  value = var.users[*].email
  description = "A list containing only the email addresses of the users."
}

Kombinera villkor och splat-uttryck

Villkorsuttryck och splat-uttryck kan kombineras för ännu mer avancerad och koncis logik. Du kan till exempel välja en lista med resurser baserat på ett villkor och sedan använda ett splat-uttryck på den valda listan.

  • Detta gör det möjligt att skapa mycket anpassningsbara konfigurationer som reagerar på komplexa scenarier.
  • Exempel: (var.env == "prod" ? aws_instance.prod : aws_instance.dev)[*].id kan hämta ID:n från olika instansuppsättningar beroende på miljön.

Bästa praxis för dynamisk logik

Även om dynamisk logik är kraftfull kan den ibland göra konfigurationer svårare att förstå om den inte används varsamt. Här är några tips:

  • Håll den lättläst: Dela upp komplexa uttryck i mindre och mer hanterbara delar.
  • Använd locals: Spara komplexa villkors- eller splat-uttryck i locals-block för bättre läsbarhet och för att undvika upprepning.
  • Testa noggrant: Dynamisk logik kan leda till oväntat beteende. Kör alltid terraform plan och granska noggrant de föreslagna ändringarna.
  • Dokumentera: Lägg till kommentarer som förklarar komplex logik, särskilt när villkor och splat-uttryck kombineras.

Snabbkontroll

Beakta följande Terraform-konfiguration:

variable "server_names" {
  type    = list(string)
  default = ["web-01", "db-01", "cache-01"]
}

output "filtered_names" {
  value = var.server_names[*]
}

Sammanfattning och nästa steg

Bra jobbat! Du har lärt dig hur du gör dina Terraform-konfigurationer mycket mer dynamiska och flexibla:

  • Vi utforskade villkorsuttryck (ternär operator) för att göra värden dynamiska utifrån specifika villkor.
  • Vi behärskade splat-uttryck ([*]) för att effektivt extrahera listor med attribut från samlingar av objekt eller resurser.

Dessa verktyg är grundläggande för att bygga skalbar, återanvändbar och anpassningsbar infrastruktur som kod. Fortsätt öva på att integrera dem i ditt dagliga Terraform-arbete!

Gratis att börja

Lär dig DevOps-bootcamp 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
142
Lektioner
568

Vanliga frågor

Är lektionen ”Villkorsuttryck och splat-uttryck” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen DevOps-bootcamp, inklusive ”Villkorsuttryck och splat-uttryck”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i DevOps-bootcamp innehåller totalt 4 lektioner.

Vad lär jag mig i ”Villkorsuttryck och splat-uttryck”?

Implementera villkorslogik i era konfigurationer med ternära operatorer och förstå splat-uttryck för att omforma listor med objekt. Ni övar på DevOps-bootcamp 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 DevOps-bootcamp?

Du behöver inga förkunskaper. Utbildningen i DevOps-bootcamp 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 3 av 4.

Hur lång tid tar lektionen ”Villkorsuttryck och splat-uttryck”?

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 DevOps-bootcamp-lektionen?

Ja. Varje DevOps-bootcamp-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.

Alla lektioner i den här kursen

  1. Använda loopar med `for_each` och `count`
  2. Terraform-funktioner
  3. Villkorsuttryck och splat-uttryck
  4. Dynamiska block för nästlad konfiguration
← Tillbaka till DevOps-bootcamp