Dynamiczne bloki dla zagnieżdżonej konfiguracji
Programowo generuj powtarzające się zagnieżdżone bloki konfiguracji za pomocą dynamicznych bloków, eliminując kopiowanie i wklejanie na przykład w regułach grup zabezpieczeń.
Dynamiczne bloki dla zagnieżdżonej konfiguracji to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 4 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.
Problem powtarzalności
Niektóre zasoby zawierają powtarzające się zagnieżdżone bloki, na przykład wiele reguł ingress w grupie zabezpieczeń. Ręczne zapisywanie każdej z nich jest rozwlekłe i utrudnia zachowanie zasady DRY. Bloki dynamiczne generują je na podstawie kolekcji.
Najpierw bloki statyczne
Oto wersja ręczna: trzy niemal identyczne bloki ingress. Proszę wyobrazić sobie utrzymywanie kilkunastu takich bloków.
resource "aws_security_group" "web" {
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}Budowa bloku dynamicznego
Blok dynamic ma etykietę odpowiadającą nazwie zagnieżdżonego bloku, kolekcję for_each oraz blok content opisujący każdą wygenerowaną instancję.
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}Obiekt iteratora
Wewnątrz content odwołuj się do bieżącego elementu za pomocą obiektu nazwanego tak jak etykieta bloku. Udostępnia on .value (element) oraz .key (klucz mapy lub indeks listy).
Definiowanie zmiennej wejściowej
Steruj blokiem dynamicznym za pomocą zmiennej o określonym typie. Lista obiektów sprawia, że każda reguła jest samodokumentująca.
variable "rules" {
type = list(object({
port = number
cidrs = list(string)
}))
}Składanie całości
Teraz zasób pozostaje zwięzły niezależnie od liczby przekazanych reguł.
resource "aws_security_group" "web" {
name = "web-sg"
dynamic "ingress" {
for_each = var.rules
content {
from_port = ingress.value.port
to_port = ingress.value.port
protocol = "tcp"
cidr_blocks = ingress.value.cidrs
}
}
}Zmiana nazwy iteratora
Argument iterator pozwala zmienić nazwę zmiennej iteracji. Jest to przydatne podczas zagnieżdżania bloków dynamicznych, aby uniknąć nieporozumień.
dynamic "ingress" {
for_each = var.rules
iterator = rule
content {
from_port = rule.value.port
to_port = rule.value.port
}
}Warunkowe pomijanie bloków
Przekazanie pustej kolekcji powoduje wygenerowanie zerowej liczby bloków. Operator trójargumentowy w for_each sprawia, że blok staje się opcjonalny.
dynamic "logging" {
for_each = var.enable_logging ? [1] : []
content {
target_bucket = var.log_bucket
}
}Zagnieżdżone bloki dynamiczne
Bloki dynamiczne można zagnieżdżać. Używaj różnych iteratorów, aby blok wewnętrzny mógł jednoznacznie odwoływać się do obu poziomów.
dynamic "setting" {
for_each = var.settings
iterator = s
content {
namespace = s.value.namespace
name = s.value.name
value = s.value.value
}
}Kiedy nie używać bloków dynamicznych
Bloki dynamiczne wprowadzają dodatkową warstwę abstrakcji i mogą pogorszyć czytelność. Jeśli masz tylko jeden lub dwa bloki statyczne, zapisz je bezpośrednio. Po bloki dynamiczne sięgaj, gdy ich liczba wynika z danych.
Inspekcja wyniku
Uruchom plan, aby potwierdzić, że wygenerowane bloki odpowiadają oczekiwaniom. Terraform rozwija każdy element kolekcji do konkretnego zagnieżdżonego bloku.
terraform planSzybki test
Sprawdź swoją wiedzę na temat bloków dynamicznych.
Podsumowanie: konfiguracja DRY z blokami zagnieżdżonymi
Bloki dynamiczne pozwalają generować zagnieżdżoną konfigurację na podstawie danych:
for_eachsteruje iteracją, acontentdefiniuje każdy blok.- Iterator udostępnia
.valuei.key. - Puste kolekcje sprawiają, że bloki są opcjonalne.
- Używaj ich oszczędnie, aby zachować czytelność konfiguracji.
Często zadawane pytania
Czy lekcja „Dynamiczne bloki dla zagnieżdżonej konfiguracji” jest bezpłatna?
Tak — pełny tekst „Dynamiczne bloki dla zagnieżdżonej konfiguracji” 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 „Dynamiczne bloki dla zagnieżdżonej konfiguracji”?
Programowo generuj powtarzające się zagnieżdżone bloki konfiguracji za pomocą dynamicznych bloków, eliminując kopiowanie i wklejanie na przykład w regułach grup zabezpieczeń. Ć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 4 z 4.
Ile czasu zajmuje lekcja „Dynamiczne bloki dla zagnieżdżonej konfiguracji”?
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
- Korzystanie z pętli `for_each` i `count`
- Wbudowane funkcje Terraform
- Wyrażenia warunkowe i splaty
- Dynamiczne bloki dla zagnieżdżonej konfiguracji