Terraform ja infrastruktuuri koodina · Oppitunti

Ehdolliset lausekkeet ja splat-lausekkeet

Toteuttakaa määrityksissänne ehdollista logiikkaa ternäärioperaattoreilla ja tutustukaa splat-lausekkeisiin objektien listojen muuntamista varten.

Oppitunti 3/411 vaihetta

Ehdolliset lausekkeet ja splat-lausekkeet on ilmainen Terraform ja infrastruktuuri koodina-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Terraform ja infrastruktuuri koodina-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Terraform ja infrastruktuuri koodina-kurssilla on yhteensä 4 oppituntia.

Dynaaminen logiikka Terraformissa

Terraformissa ei ole kyse vain staattisista määrityksistä! Jotta infrastruktuurin määrityksistä voidaan tehdä älykkäämpiä ja mukautuvampia, käytämme dynaamista logiikkaa.

Tässä oppitunnissa esitellään kaksi tehokasta työkalua: ehtolausekkeet ja splat-lausekkeet. Niiden avulla infrastruktuuri voi mukautua eri tilanteisiin ja tietoja voidaan muuntaa tehokkaasti.

Ehtolausekkeet: perusteet

Ehtolausekkeilla, joita kutsutaan usein ternäärioperaattoreiksi, voit valita jommankumman kahdesta arvosta sen perusteella, onko ehto tosi vai epätosi. Ne vastaavat arvoille tarkoitettua yksinkertaista "if-else"-lausetta.

  • Syntaksi: condition ? value_if_true : value_if_false
  • Ne sopivat erinomaisesti joustavien ja uudelleenkäytettävien määritysten tekemiseen sekä eri ympäristöihin ja asetuksiin mukautumiseen.

Ehto: yksinkertainen arvoesimerkki

Katsotaan, miten ehtolausekkeella voidaan määrittää paikallisen muuttujan arvo dynaamisesti syötemuuttujan perusteella. Kokeile muuttaa default = "dev" muotoon default = "prod" ja suorittaa määritys uudelleen.

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."
}

Ehto: resurssin attribuuttiesimerkki

Ehtolausekkeilla voi hallita myös resurssien attribuutteja ja jopa sitä, luodaanko resurssi lainkaan! Tässä S3-säilö luodaan ehdollisesti count-metamääritteen avulla.

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."
}

Splat-lausekkeiden ymmärtäminen

Splat-lausekkeilla ([*]) muunnetaan olioiden luettelo luetteloksi, joka sisältää kyseisten olioiden tiettyjä attribuutteja. Se on tehokas oikotie tietojen poimimiseen useista kohteista kerralla.

  • Syntaksi: LIST_OF_OBJECTS[*].ATTRIBUTE
  • Ne helpottavat kokoelmien käsittelyä, esimerkiksi count-metamääritteellä luotuja useita resursseja tai monimutkaisia luettelomuuttujia.

Splat: resurssien tuloste-esimerkki

Oletetaan, että luot useita EC2-instansseja. Miten saat helposti luettelon niiden kaikista julkisista IP-osoitteista? Splat-lausekkeet sopivat tähän täydellisesti! Huomautus: Tarvitset AWS-alueellesi kelvollisen AMI-tunnuksen.

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: muuttujaluetteloesimerkki

Splat-lausekkeet eivät ole tarkoitettu vain resursseille, vaan ne toimivat erinomaisesti myös monimutkaisten muuttujien kanssa. Tässä meillä on käyttäjäolioiden luettelo, josta haluamme poimia vain sähköpostiosoitteet.

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."
}

Ehtolausekkeiden ja splat-lausekkeiden yhdistäminen

Ehto- ja splat-lausekkeita voi yhdistää edistyneemmän ja tiiviimmän logiikan toteuttamiseksi. Voit esimerkiksi valita resurssiluettelon ehdollisesti ja käyttää sitten valittuun luetteloon splat-lauseketta.

  • Näin voit tehdä määrityksistä erittäin mukautuvia, jolloin ne reagoivat monimutkaisiin tilanteisiin.
  • Esimerkiksi (var.env == "prod" ? aws_instance.prod : aws_instance.dev)[*].id voi hakea tunnukset eri instanssijoukoista ympäristön perusteella.

Dynaamisen logiikan parhaat käytännöt

Vaikka dynaaminen logiikka on tehokasta, se voi vaikeuttaa määritysten ymmärtämistä, jos sitä ei käytetä harkiten. Tässä muutamia vinkkejä:

  • Pidä koodi luettavana: Pilko monimutkaiset lausekkeet pienemmiksi ja helpommin hallittaviksi osiksi.
  • Käytä paikallisia arvoja: Tallenna monimutkaiset ehto- tai splat-lausekkeet locals-lohkoihin luettavuuden parantamiseksi ja toiston välttämiseksi.
  • Testaa perusteellisesti: Dynaaminen logiikka voi johtaa odottamattomaan toimintaan. Suorita aina terraform plan ja tarkista ehdotetut muutokset huolellisesti.
  • Dokumentoi: Lisää kommentteja monimutkaisen logiikan selittämiseksi, erityisesti ehtolausekkeita ja splat-lausekkeita yhdistettäessä.

Pikatarkistus

Tarkastele seuraavaa Terraform-määritystä:

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

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

Kertaus ja seuraavat vaiheet

Hienoa työtä! Olet oppinut tekemään Terraform-määrityksistä paljon dynaamisempia ja joustavampia:

  • Tutustuimme ehtolausekkeisiin (ternäärioperaattori), joiden avulla arvoja voidaan muuttaa dynaamisesti tiettyjen ehtojen perusteella.
  • Opimme käyttämään splat-lausekkeita ([*]) attribuuttiluetteloiden tehokkaaseen poimimiseen olio- tai resurssikokoelmista.

Nämä työkalut ovat skaalautuvan, uudelleenkäytettävän ja mukautuvan infrastruktuurin koodina rakentamisen perusta. Harjoittele niiden käyttöä, jotta voit ottaa ne osaksi päivittäisiä Terraform-työnkulkujasi!

Aloita maksutta

Opi Terraform ja infrastruktuuri koodina tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Ehdolliset lausekkeet ja splat-lausekkeet” ilmainen?

Kyllä – oppitunnin ”Ehdolliset lausekkeet ja splat-lausekkeet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Terraform ja infrastruktuuri koodina-kurssin, päivitä CoddyKit PROhon. Terraform ja infrastruktuuri koodina-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Ehdolliset lausekkeet ja splat-lausekkeet”?

Toteuttakaa määrityksissänne ehdollista logiikkaa ternäärioperaattoreilla ja tutustukaa splat-lausekkeisiin objektien listojen muuntamista varten. Harjoittelet Terraform ja infrastruktuuri koodina-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Terraform ja infrastruktuuri koodina-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Terraform ja infrastruktuuri koodina-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Ehdolliset lausekkeet ja splat-lausekkeet”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Terraform ja infrastruktuuri koodina-oppitunnilla?

Kyllä. Jokainen Terraform ja infrastruktuuri koodina-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Silmukat `for_each`- ja `count`-konstruktioilla
  2. Terraformin sisäänrakennetut funktiot
  3. Ehdolliset lausekkeet ja splat-lausekkeet
  4. Dynaamiset lohkot sisäkkäisiä määrityksiä varten
← Takaisin: Terraform ja infrastruktuuri koodina