Korzystanie z danych zewnętrznych i szablonów
Pobieraj dynamiczne wartości do Terraform za pomocą źródła danych external i renderuj pliki konfiguracyjne przy użyciu funkcji templatefile.
Korzystanie z danych zewnętrznych i szablonów 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.
Poza wbudowane źródła danych
Potrafisz już odpytywać AWS za pomocą źródeł danych. Czasami potrzebne dane znajdują się poza dowolnym providerem, na przykład w wyniku działania skryptu powłoki lub wewnętrznego API. Lukę tę wypełniają źródło danych external i funkcje template.
Źródło danych external
Źródło danych external uruchamia program i odczytuje JSON z jego standardowego wyjścia. Jest to rozwiązanie awaryjne dla logiki, której Terraform nie potrafi wyrazić natywnie.
data "external" "git_sha" {
program = ["bash", "./scripts/git_sha.sh"]
}Kontrakt programu
Program zewnętrzny otrzymuje obiekt JSON na standardowym wejściu i musi wypisać na standardowe wyjście płaski obiekt JSON zawierający wartości typu string. Każdy inny wynik jest błędem.
#!/bin/bash
echo '{"sha": "abc123"}'Odczytywanie wyników zewnętrznych
Zwrócone wartości są dostępne za pośrednictwem mapy result. Każda wartość jest ciągiem znaków, dlatego w razie potrzeby należy rzutować ją na inny typ.
resource "aws_instance" "app" {
ami = "ami-0abcd1234"
instance_type = "t3.micro"
tags = {
GitSha = data.external.git_sha.result.sha
}
}Kiedy unikać external
Źródło external jest uruchamiane podczas każdego planowania i narusza powtarzalność, jeśli skrypt nie jest deterministyczny. Jeśli istnieje odpowiednie źródło danych providera, wybierz je zamiast tego; external stosuj tylko w rzeczywistych brakach.
Renderowanie plików za pomocą templatefile
Funkcja templatefile odczytuje szablon, podstawia zmienne i zwraca ciąg znaków. Doskonale nadaje się do danych użytkownika cloud-init oraz plików konfiguracyjnych.
resource "aws_instance" "web" {
ami = "ami-0abcd1234"
instance_type = "t3.micro"
user_data = templatefile("init.tftpl", {
hostname = "web-01"
})
}Składnia szablonów
W pliku .tftpl interpoluj wartości za pomocą składni dollar-brace. Terraform podstawi przekazane zmienne.
#!/bin/bash
hostnamectl set-hostname ${hostname}
echo 'Provisioned by Terraform'Pętle w szablonach
Szablony obsługują dyrektywy iteracji. Dyrektywa for renderuje powtarzające się wiersze, co jest przydatne podczas generowania list hostów.
%{ for ip in ips ~}
server ${ip}:8080
%{ endfor ~}Szablony inline za pomocą templatestring
W przypadku krótkich fragmentów możesz pominąć plik i użyć templatestring (lub starszego format), aby bezpośrednio w konfiguracji tworzyć dynamiczne ciągi znaków.
locals {
greeting = templatestring("Hello, $${name}!", { name = "Ops" })
}Łączenie obu rozwiązań
Typowy schemat wygląda tak: źródło external pobiera dynamiczną wartość, a następnie templatefile wstawia ją do konfiguracji renderowanej jako dane użytkownika.
user_data = templatefile("app.tftpl", {
version = data.external.git_sha.result.sha
})Zapewnianie idempotentności renderowania
Ponieważ zmiany w user_data wymuszają zastąpienie instancji, dane wejściowe szablonu powinny pozostać stabilne. Przekazywanie stale zmieniającej się wartości, takiej jak znacznik czasu, spowoduje ponowne tworzenie instancji przy każdym apply.
Szybki test
Sprawdź swoją wiedzę na temat zewnętrznego źródła danych.
Podsumowanie: dynamiczne dane wejściowe i szablony
Rozszerzono możliwości Terraform w zakresie danych:
- Źródło
externaluruchamia skrypty zwracające JSON. templatefilerenderuje pliki konfiguracyjne i pliki z danymi użytkownika.- Dyrektywy szablonów obsługują pętle i interpolację.
- Stabilne dane wejściowe zapobiegają niepożądanym zastąpieniom zasobów.
Często zadawane pytania
Czy lekcja „Korzystanie z danych zewnętrznych i szablonów” jest bezpłatna?
Tak — pełny tekst „Korzystanie z danych zewnętrznych i szablonów” 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 danych zewnętrznych i szablonów”?
Pobieraj dynamiczne wartości do Terraform za pomocą źródła danych external i renderuj pliki konfiguracyjne przy użyciu funkcji templatefile. Ć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 „Korzystanie z danych zewnętrznych i szablonów”?
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
- Odpytywanie danych za pomocą źródeł danych
- Provisionery local-exec i remote-exec
- Zasoby null i wyzwalacze
- Korzystanie z danych zewnętrznych i szablonów