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.
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.
counton tarkoitettu identtisten resurssien yksinkertaiseen numeeriseen toistoon. Resurssit erotetaan toisistaancount.index-arvolla.for_eachon tarkoitettu joukkojen tai karttojen läpikäyntiin. Sen avulla luodaan toisistaan poikkeavia resursseja, joilla on yksilölliset ominaisuudet. Näihin pääsee käsiksi arvoillaeach.keyjaeach.value.
Nämä rakenteet ovat olennaisia skaalautuvan ja ylläpidettävän infrastruktuurin hallinnassa koodina!
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
- Silmukat `for_each`- ja `count`-konstruktioilla
- Terraformin sisäänrakennetut funktiot
- Ehdolliset lausekkeet ja splat-lausekkeet
- Dynaamiset lohkot sisäkkäisiä määrityksiä varten