Terraform ja infrastruktuuri koodina · Oppitunti

Silmukat `for_each`- ja `count`-konstruktioilla

Oppikaa luomaan resurssista tai moduulista useita instansseja `count`- ja `for_each`-konstruktioilla sekä käsittelemään kokoelmia ja map-rakenteita tehokkaasti.

Oppitunti 1/411 vaihetta

Silmukat `for_each`- ja `count`-konstruktioilla on ilmainen Terraform ja infrastruktuuri koodina-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Silmukoiden esittely

Kun hallitset infrastruktuuria Terraformilla, sinun on usein luotava useita samankaltaisia resursseja. Kuvittele, että tarvitset 10 verkkopalvelinta tai 5 tietokantainstanssia. Saman koodilohkon kirjoittaminen toistuvasti olisi työlästä ja altistaisi virheille!

Tässä oppitunnissa esitellään kaksi tehokasta Terraform-ominaisuutta: count ja for_each. Niiden avulla voit provisioida useita resursseja tehokkaasti ja pitää määritykset selkeinä sekä skaalautuvina.

Miksi käyttää `count`- ja `for_each`-toimintoja?

Silmukoiden, kuten count- ja for_each-toimintojen, käytöstä on merkittäviä hyötyjä:

  • Vähemmän toistoa: Kirjoita infrastruktuurikoodi kerran ja käytä sitä uudelleen.
  • Parempi luettavuus: Määrityksistä tulee paljon selkeämpiä ja helpommin ymmärrettäviä.
  • Skaalautuvuus: Voit helposti muuttaa resurssien määrää vaihtamalla yhtä arvoa tai kokoelmaa.
  • Yhdenmukaisuus: Varmista, että kaikki samankaltaiset resurssit määritetään samalla tavalla.

`count` yksinkertaiseen toistoon

count-met argumentti sopii erinomaisesti tilanteisiin, joissa sinun on luotava resurssista tai moduulista useita lähes identtisiä instansseja. Anna kokonaislukuarvo, ja Terraform luo kyseisen määrän instansseja.

Jokainen count-toiminnolla luotu instanssi saa indeksin, joka alkaa arvosta 0 ja päättyy arvoon count - 1. Voit käyttää tätä indeksiä count.index-arvon avulla.

Esimerkki: useita EC2-instansseja `count`-toiminnolla

Provisioidaan kolme identtistä AWS EC2 -instanssia. Huomaa, miten count.index-arvoa käytetään antamaan jokaiselle palvelimelle yksilöllinen nimi.

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web_server" {
  count         = 3
  ami           = "ami-053b0dcd10dcf2f56" # Ubuntu Server 20.04 LTS
  instance_type = "t2.micro"
  tags = {
    Name = "WebServer-${count.index}"
  }
}

`count.index`-arvon ymmärtäminen

Edellisessä esimerkissä ${count.index} sai automaattisesti arvot 0, 1 ja 2 kullekin instanssille. Näin voit luoda yksilöllisiä tunnisteita tai säätää kunkin instanssin ominaisuuksia.

Ilman count.index-arvoa kaikilla kolmella palvelimella olisi täsmälleen sama ”Name”-tunniste, mikä voisi aiheuttaa sekaannusta tai ongelmia AWS:ssä.

`for_each`-toiminnon esittely

Vaikka count sopii hyvin yksinkertaiseen toistoon, for_each tarjoaa enemmän joustavuutta. Se käy läpi merkkijoukkoa tai merkkijonojen karttaa ja luo yhden instanssin kutakin alkiota kohti.

for_each sopii erityisesti tilanteisiin, joissa resursseilla on toisistaan poikkeavat määritykset tai resurssien määrä määräytyy muun kuin numeerisen kokoelman perusteella, kuten ympäristönimien luettelosta tai käyttäjäasetusten kartasta.

Esimerkki: `for_each` ja joukko

Tässä luomme kolme S3-säilöä, joista jokainen nimetään for_each-joukon alkion mukaan. Käytämme each.value-arvoa käsiteltävän alkion käyttämiseen.

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "app_buckets" {
  for_each = toset(["prod-app-data", "dev-app-logs", "test-app-assets"])
  bucket   = each.value
  acl      = "private"
  tags = {
    Environment = split("-", each.value)[0]
  }
}

Esimerkki: `for_each` ja kartta

Kartan avulla voit määrittää kullekin resurssille monimutkaisempia ja yksilöllisiä asetuksia. Tässä luomme S3-säilöjä, joiden versiointiasetukset vaihtelevat ympäristöavainten perusteella.

Voit käyttää avainta each.key-arvolla ja arvoa each.value-arvolla.

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "configured_bucket" {
  for_each = {
    production = { name = "prod-data-bucket", versioning = true }
    development = { name = "dev-logs-bucket", versioning = false }
  }
  bucket        = each.value.name
  acl           = "private"
  versioning {
    enabled = each.value.versioning
  }
  tags = {
    Environment = each.key
  }
}

`count` vai `for_each`: valitse viisaasti

Milloin kumpaakin kannattaa käyttää?

  • Käytä count-toimintoa: Yksinkertaiseen numeeriseen iterointiin ja identtisten resurssien luomiseen, kun määrä on tärkein tekijä. Se sopii tilanteisiin, joissa tarvitset vain indeksin resurssien erottamiseen.
  • Käytä for_each-toimintoa: Kun iteroit monimutkaisten kokoelmien, kuten joukkojen tai karttojen, yli ja resursseilla täytyy olla kokoelman alkioista johdettuja yksilöllisiä tunnisteita tai ominaisuuksia. Sitä suositellaan yleensä, kun jokaisella instanssilla on selkeä ja yksilöllinen looginen tunniste.

Pikatarkistus: silmukat

Ajatellaan tilannetta, jossa sinun on luotava organisaatiosi jokaiselle tiimille S3-säilö ja jokaiselle säilölle kyseisen tiimin määrittämä säilytyskäytäntö.

Kertaus: tehokas resurssien luominen

Hienoa työtä! Olet oppinut hyödyntämään count- ja for_each-toimintoja Terraform-määritysten tekemiseen dynaamisemmiksi ja tehokkaammiksi.

  • count on tarkoitettu identtisten resurssien yksinkertaiseen numeeriseen toistoon. Resurssit erotetaan toisistaan count.index-arvolla.
  • for_each on tarkoitettu joukkojen tai karttojen läpikäyntiin. Sen avulla luodaan toisistaan poikkeavia resursseja, joilla on yksilölliset ominaisuudet. Näihin pääsee käsiksi arvoilla each.key ja each.value.

Nämä rakenteet ovat olennaisia skaalautuvan ja ylläpidettävän infrastruktuurin hallinnassa koodina!

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 ”Silmukat `for_each`- ja `count`-konstruktioilla” ilmainen?

Kyllä – oppitunnin ”Silmukat `for_each`- ja `count`-konstruktioilla” 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 ”Silmukat `for_each`- ja `count`-konstruktioilla”?

Oppikaa luomaan resurssista tai moduulista useita instansseja `count`- ja `for_each`-konstruktioilla sekä käsittelemään kokoelmia ja map-rakenteita tehokkaasti. 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 1/4.

Kuinka kauan ”Silmukat `for_each`- ja `count`-konstruktioilla”-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