0Pricing
Terraform Infrastructure as Code · Lekcja

Zasoby null i wyzwalacze

Poznaj `null_resource`, który służy do wykonywania dowolnych poleceń nieodpowiadających rzeczywistemu zasobowi chmurowemu, oraz używaj wyzwalaczy do kontrolowania uruchamiania provisionerów.

Zasoby null i wyzwalacze to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 3 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.

Czym jest null_resource?

Terraformowy null_resource to specjalny typ zasobu, który nie tworzy bezpośrednio żadnego obiektu infrastruktury u dostawcy chmurowego ani nim nie zarządza.

Zamiast tego pełni funkcję symbolu zastępczego służącego do uruchamiania dowolnych poleceń lub skryptów. Często używa się go do zadań wykraczających poza zakres typowej aprowizacji zasobów.

Dlaczego używać null_resource?

Można się zastanawiać, po co potrzebny jest zasób „null”. Jest on niezwykle przydatny do:

  • Uruchamiania lokalnych skryptów: wykonywania poleceń na komputerze, na którym działa Terraform (np. przygotowywania plików konfiguracyjnych).
  • Działań po wdrożeniu: wykonywania zadań konfiguracyjnych lub czyszczenia po aprowizacji rzeczywistych zasobów.
  • Komunikacji z zewnętrznymi interfejsami API: gdy dla konkretnej usługi nie istnieje dedykowany provider Terraform.
  • Własnej logiki: koordynowania niestandardowych kroków, które nie są powiązane z konkretnym zasobem chmurowym.

Podstawowa struktura null_resource

Blok null_resource wygląda tak jak każdy inny zasób Terraform. Samodzielnie, bez provisionerów ani triggerów, po prostu tworzy obiekt „null” w stanie Terraform i nie wykonuje żadnych dodatkowych działań.

Zazwyczaj łączy się go z provisionerami w celu wykonywania poleceń oraz z triggerami w celu określenia, kiedy te polecenia mają zostać uruchomione.

Prosty przykład null_resource

Oto minimalny przykład null_resource. Jeśli wykonają Państwo terraform apply, zasób zostanie utworzony w stanie, ale nie zostanie wykonana żadna zewnętrzna akcja.

Jest to tylko symbol zastępczy, który można później rozszerzyć o działania.

resource "null_resource" "my_placeholder" {
  # This resource exists in state but performs no action.
  # It's ready to attach provisioners or triggers.
}

Provisionery z null_resource

Prawdziwa użyteczność null_resource ujawnia się po połączeniu go z provisionerami.

Provisionery pozwalają wykonywać skrypty lub polecenia na komputerze, na którym działa Terraform (local-exec), albo na samym zdalnym zasobie (remote-exec, choć w przypadku null_resource używa się go rzadziej).

Dzięki temu null_resource może pełnić funkcję wykonawcy działań.

Wprowadzenie do triggerów

triggers to mapa dowolnych par klucz-wartość zdefiniowana w bloku null_resource.

Jej zadaniem jest poinformowanie Terraformu: „Jeśli zmieni się dowolna wartość w tej mapie, ten null_resource (wraz z jego provisionerami) musi zostać uruchomiony ponownie”.

Ma to kluczowe znaczenie, aby null_resource reagował na zmiany w infrastrukturze.

Jak działają triggery

Gdy zmieni się wartość w mapie triggers, Terraform wykrywa modyfikację zasobu null_resource.

Podczas wykonywania terraform apply Terraform:

  • niszczy istniejący null_resource (jeśli istnieje),
  • tworzy ponownie zasób null_resource,
  • uruchamia ponownie powiązane provisionery.

Mechanizm ten gwarantuje, że niestandardowe działania zostaną wykonane tylko wtedy, gdy zmienią się odpowiednie zależności.

Przykład: triggery i local-exec

W tym przykładzie używamy null_resource do zasymulowania aktualizacji pliku konfiguracyjnego na podstawie prostej zmiennej. Provisioner local-exec uruchamia polecenie, a triggers gwarantuje jego ponowne wykonanie po zmianie var.app_version.

variable "app_version" {
  description = "The version of the application."
  type        = string
  default     = "1.0.0"
}

resource "null_resource" "update_config_file" {
  triggers = {
    version_change = var.app_version
  }

  provisioner "local-exec" {
    command = "echo 'Config updated for version: ${self.triggers.version_change}' > app_config.txt"
  }
}

Najlepsze praktyki i alternatywy

Choć null_resource jest przydatny, należy korzystać z niego rozważnie:

  • Preferuj providery: jeśli dla danego zadania istnieje dedykowany provider lub zasób Terraform, użyj go zamiast null_resource.
  • Zachowaj idempotencję: zadbaj o to, aby skrypty uruchamiane przez provisionery można było bezpiecznie wykonywać wielokrotnie bez skutków ubocznych.
  • Unikaj zarządzania stanem: nie próbuj zarządzać zewnętrznym stanem za pomocą null_resource; do tego służą backendy stanu zdalnego.
  • Rozważ źródło danych external: w przypadku złożonej zewnętrznej logiki zwracającej dane strukturalne źródło danych external może być prostszą alternatywą.

Szybkie sprawdzenie: zasoby null

Dowiedzieli się Państwo już o null_resource i triggers. Sprawdźmy teraz Państwa zrozumienie tematu.

Podsumowanie: null i triggery

W tej lekcji poznali Państwo wszechstronność terraformowego null_resource — zaawansowanego narzędzia do wykonywania niestandardowych poleceń i skryptów, które nie odpowiadają konkretnym zasobom chmurowym.

Poznali Państwo również triggers — mechanizm w ramach null_resource, który pozwala definiować zależności i gwarantuje ponowne wykonanie provisionerów za każdym razem, gdy te zależności ulegną zmianie. Umożliwia to tworzenie dynamicznej i reaktywnej automatyzacji niestandardowej w ramach IaC.

Często zadawane pytania

Czy lekcja „Zasoby null i wyzwalacze” jest bezpłatna?

Tak — pełny tekst „Zasoby null i wyzwalacze” 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 „Zasoby null i wyzwalacze”?

Poznaj `null_resource`, który służy do wykonywania dowolnych poleceń nieodpowiadających rzeczywistemu zasobowi chmurowemu, oraz używaj wyzwalaczy do kontrolowania uruchamiania provisionerów. Ć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 3 z 4.

Ile czasu zajmuje lekcja „Zasoby null i wyzwalacze”?

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. Odpytywanie danych za pomocą źródeł danych
  2. Provisionery local-exec i remote-exec
  3. Zasoby null i wyzwalacze
  4. Korzystanie z danych zewnętrznych i szablonów
← Powrót do Terraform Infrastructure as Code