0Pricing
Terraform Infrastructure as Code · Lekcja

Korzystanie z pętli `for_each` i `count`

Dowiedz się, jak tworzyć wiele instancji zasobu lub modułu za pomocą `count` i `for_each`, aby efektywnie obsługiwać kolekcje i mapy.

Korzystanie z pętli `for_each` i `count` to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Terraform Infrastructure as Code, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Wprowadzenie do pętli

Podczas zarządzania infrastrukturą za pomocą Terraformu często trzeba tworzyć wiele podobnych zasobów. Proszę sobie wyobrazić konieczność utworzenia 10 serwerów WWW lub 5 instancji baz danych. Wielokrotne zapisywanie tego samego bloku kodu byłoby żmudne i podatne na błędy!

W tej lekcji poznają Państwo dwie zaawansowane funkcje Terraformu: count i for_each. Pomagają one efektywnie aprowizować wiele zasobów, zachowując przejrzystość i skalowalność konfiguracji.

Dlaczego używać `count` i `for_each`?

Używanie pętli takich jak count i for_each przynosi znaczące korzyści:

  • Mniej powtórzeń: kod infrastruktury jest zapisywany raz i wielokrotnie wykorzystywany.
  • Większa czytelność: konfiguracje stają się przejrzystsze i łatwiejsze do zrozumienia.
  • Skalowalność: liczbę zasobów można łatwo zmienić, modyfikując pojedynczą wartość lub kolekcję.
  • Spójność: wszystkie podobne zasoby są konfigurowane w identyczny sposób.

`count` do prostego powtarzania

Argument metadanych count doskonale sprawdza się, gdy trzeba utworzyć wiele niemal identycznych instancji zasobu lub modułu. Podają Państwo wartość całkowitą, a Terraform tworzy odpowiednią liczbę instancji.

Każda instancja utworzona za pomocą count otrzymuje indeks — od 0 do count - 1. Dostęp do tego indeksu uzyskuje się za pomocą count.index.

Przykład: wiele instancji EC2 za pomocą `count`

Utwórzmy trzy identyczne instancje AWS EC2. Proszę zwrócić uwagę, jak count.index służy do nadania każdemu serwerowi unikatowej nazwy.

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

Zrozumienie `count.index`

W poprzednim przykładzie ${count.index} automatycznie przyjmował dla poszczególnych instancji wartości 0, 1 i 2. Dzięki temu można tworzyć unikatowe identyfikatory lub dostosowywać właściwości każdej instancji.

Bez count.index wszystkie trzy serwery miałyby dokładnie ten sam tag „Name”, co mogłoby prowadzić do nieporozumień lub problemów w AWS.

Wprowadzenie do `for_each`

Choć count świetnie nadaje się do prostego powtarzania, for_each oferuje większą elastyczność. Iteruje po zbiorze ciągów znaków lub mapie ciągów znaków, tworząc jedną instancję dla każdego elementu.

for_each jest idealny, gdy trzeba zarządzać zasobami o różnych konfiguracjach albo gdy liczba zasobów wynika z kolekcji innej niż numeryczna (np. listy nazw środowisk lub mapy ustawień użytkowników).

Przykład: `for_each` ze zbiorem

W tym przykładzie tworzymy trzy zasobniki S3, z których każdy otrzymuje nazwę odpowiadającą elementowi naszego zbioru for_each. Używamy each.value, aby uzyskać dostęp do bieżącego elementu iteracji.

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

Przykład: `for_each` z mapą

Mapa pozwala definiować bardziej złożone i unikatowe konfiguracje dla każdego zasobu. W tym przykładzie tworzymy zasobniki S3 z różnymi ustawieniami wersjonowania zależnymi od kluczy środowisk.

Dostęp do klucza uzyskuje się za pomocą each.key, a do wartości — za pomocą each.value.

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` a `for_each`: właściwy wybór

Kiedy należy użyć którego rozwiązania?

  • Użyj count: do prostej iteracji numerycznej i tworzenia identycznych zasobów, gdy najważniejsza jest ich liczba. To dobre rozwiązanie, gdy do rozróżnienia wystarczy indeks.
  • Użyj for_each: do iterowania po złożonych kolekcjach (zbiorach lub mapach), gdy zasoby wymagają unikatowych identyfikatorów lub właściwości wynikających z elementów kolekcji. Zwykle jest to preferowane rozwiązanie, gdy każda instancja ma jasno określony, unikatowy identyfikator logiczny.

Szybkie sprawdzenie: pętle

Rozważmy sytuację, w której trzeba utworzyć zasobnik S3 dla każdego zespołu w organizacji, a każdy zasobnik musi mieć określoną przez ten zespół zasadę przechowywania.

Podsumowanie: efektywne tworzenie zasobów

Świetna praca! Dowiedzieli się Państwo, jak wykorzystać count i for_each, aby tworzyć bardziej dynamiczne i efektywne konfiguracje Terraformu.

  • count służy do prostego, numerycznego powtarzania identycznych zasobów z użyciem count.index do ich rozróżniania.
  • for_each służy do iterowania po zbiorach lub mapach i tworzenia różnych zasobów z unikatowymi właściwościami za pomocą each.key i each.value.

Konstrukcje te mają fundamentalne znaczenie dla zarządzania skalowalną i łatwą w utrzymaniu infrastrukturą jako kodem!

Często zadawane pytania

Czy lekcja „Korzystanie z pętli `for_each` i `count`” jest bezpłatna?

Tak — pełny tekst „Korzystanie z pętli `for_each` i `count`” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Terraform Infrastructure as Code, przejdź na CoddyKit PRO. Kurs Terraform Infrastructure as Code zawiera 4 lekcji w sumie.

Co nauczysz się w „Korzystanie z pętli `for_each` i `count`”?

Dowiedz się, jak tworzyć wiele instancji zasobu lub modułu za pomocą `count` i `for_each`, aby efektywnie obsługiwać kolekcje i mapy. Ćwiczysz Terraform Infrastructure as Code z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Terraform Infrastructure as Code?

Nie wymagamy żadnego doświadczenia. Terraform Infrastructure as Code w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Korzystanie z pętli `for_each` i `count`”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Terraform Infrastructure as Code?

Tak. Każda lekcja Terraform Infrastructure as Code zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Korzystanie z pętli `for_each` i `count`
  2. Wbudowane funkcje Terraform
  3. Wyrażenia warunkowe i splaty
  4. Dynamiczne bloki dla zagnieżdżonej konfiguracji
← Powrót do Terraform Infrastructure as Code