Provisionery local-exec i remote-exec
Zaimplementuj provisionery `local-exec` i `remote-exec`, aby uruchamiać polecenia odpowiednio na maszynie uruchamiającej Terraform lub na utworzonych zasobach.
Provisionery local-exec i remote-exec to bezpłatna lekcja Terraform Infrastructure as Code na CoddyKit. To lekcja 2 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.
Poznaj provisioners Terraform
A co, jeśli potrzebujesz uruchomić skrypt lub polecenie po utworzeniu zasobu przez Terraform? Właśnie do tego służą provisioners!
Provisioners umożliwiają wykonywanie działań na komputerze lokalnym lub zdalnym zasobie w ramach jego cyklu życia. Stanowią pomost między utworzeniem infrastruktury a początkową konfiguracją oprogramowania.
Można traktować je jako punkty zaczepienia pozwalające dostosować zasoby zaraz po ich utworzeniu.
`local-exec`: uruchamianie lokalne
Provisioner local-exec uruchamia polecenia na komputerze, na którym wykonywany jest Terraform.
Jest przydatny przy zadaniach takich jak:
- Lokalne generowanie plików konfiguracyjnych.
- Uruchamianie lokalnych skryptów lub narzędzi.
- Wykonywanie operacji czyszczenia po zniszczeniu zasobu.
Doskonale nadaje się do działań, które nie muszą być wykonywane na samym zasobie chmurowym.
Podstawowy przykład `local-exec`
Zobaczmy, jak local-exec tworzy prosty plik na komputerze lokalnym po utworzeniu zasobu null.
null_resource to symbol zastępczy, który nie tworzy niczego w chmurze, ale jest przydatny do uruchamiania provisioners.
resource "null_resource" "local_file_creator" {
provisioner "local-exec" {
command = "echo 'Local file created by Terraform!' > local_output.txt"
}
triggers = {
always_run = timestamp()
}
}Kiedy używać `local-exec`
local-exec świetnie sprawdza się przy:
- Powiadomieniach po wdrożeniu: Wysyłaniu wiadomości e-mail lub komunikatu Slack.
- Lokalnym generowaniu plików: Tworzeniu plików inwentaryzacyjnych dla Ansible lub innych narzędzi.
- Kontrolach przed wdrożeniem: Uruchamianiu lokalnych skryptów walidacyjnych.
- Uruchamianiu CI/CD: Rozpoczynaniu działania potoku po zmianach infrastruktury.
Pamiętaj, że działa on w miejscu, z którego uruchamiasz terraform apply.
`remote-exec`: uruchamianie na zasobie
W przeciwieństwie do local-exec, provisioner remote-exec uruchamia polecenia bezpośrednio na zdalnym zasobie.
Jest to niezbędne przy początkowej konfiguracji nowo utworzonego serwera, na przykład podczas:
- Instalowania pakietów oprogramowania (np. serwera WWW lub bazy danych).
- Konfigurowania ustawień systemu operacyjnego.
- Wdrażania kodu aplikacji.
Wymaga połączenia sieciowego z docelowym zasobem (np. SSH w systemie Linux lub WinRM w systemie Windows).
Nawiązywanie połączenia dla `remote-exec`
Aby remote-exec mógł działać, Terraform musi połączyć się z zasobem.
Typowe rodzaje połączeń to:
- SSH: Dla instancji Linux; wymaga klucza prywatnego.
- WinRM: Dla instancji Windows; wymaga danych uwierzytelniających.
Szczegóły połączenia zazwyczaj konfiguruje się w bloku provisioner albo dziedziczy z zasobu.
`remote-exec` w instancji EC2
Oto sposób użycia remote-exec do zainstalowania Apache na nowej instancji AWS EC2.
Uwaga: wymaga to utworzenia instancji EC2 i zapewnienia do niej dostępu przez SSH. Dla uproszczenia zakładamy, że para kluczy i grupa zabezpieczeń już istnieją.
resource "aws_instance" "web_server" {
ami = "ami-0abcdef1234567890" # Replace with valid AMI ID
instance_type = "t2.micro"
key_name = "my-ssh-key" # Replace with your SSH key name
vpc_security_group_ids = ["sg-0123456789abcdef0"] # Replace with your SG ID
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl start httpd",
"sudo systemctl enable httpd"
]
connection {
type = "ssh"
user = "ec2-user"
private_key = file("~/.ssh/my-ssh-key.pem")
host = self.public_ip
}
}
}Kiedy używać `remote-exec`
remote-exec idealnie nadaje się do:
- Inicjalnej konfiguracji serwerów: Instalowania serwerów WWW, baz danych lub Dockera.
- Wdrażania aplikacji: Kopiowania kodu aplikacji i jego konfigurowania.
- Zarządzania konfiguracją: Bezpośredniego uruchamiania playbooków Ansible lub recept Chef.
- Walidacji po utworzeniu: Sprawdzania, czy usługi działają na nowej instancji.
To podstawowe narzędzie do konfigurowania początkowego stanu serwera.
Provisionery podczas niszczenia
Provisionery mogą również uruchamiać się podczas niszczenia zasobu. Jest to przydatne przy wykonywaniu zadań związanych z czyszczeniem.
W bloku provisionera można określić when = destroy. Można go na przykład użyć do wyrejestrowania instancji z modułu równoważenia obciążenia przed jej zakończeniem.
Można również skonfigurować zachowanie on_failure, które określa, co ma się stać w przypadku niepowodzenia polecenia provisionera. Domyślnie operacja kończy się błędem.
Quiz dotyczący provisionerów
Którego provisionera należy użyć, aby zainstalować serwer WWW (taki jak Nginx) na nowo utworzonej instancji maszyny wirtualnej?
Provisionery: lokalne a zdalne
Omówiliśmy już provisionery Terraform — zaawansowane narzędzia do wykonywania poleceń w cyklu życia zasobu.
local-execuruchamia polecenia na komputerze, na którym wykonywany jest Terraform. Jest przydatny w przypadku lokalnych skryptów lub powiadomień.remote-execuruchamia polecenia bezpośrednio na aprowizowanym zasobie. Doskonale nadaje się do wstępnej konfiguracji serwerów za pomocą oprogramowania lub ustawień.
Provisionery pomagają połączyć wdrażanie infrastruktury z początkową konfiguracją aplikacji. Następnie omówimy zaawansowane techniki zarządzania stanem!
Często zadawane pytania
Czy lekcja „Provisionery local-exec i remote-exec” jest bezpłatna?
Tak — pełny tekst „Provisionery local-exec i remote-exec” 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 „Provisionery local-exec i remote-exec”?
Zaimplementuj provisionery `local-exec` i `remote-exec`, aby uruchamiać polecenia odpowiednio na maszynie uruchamiającej Terraform lub na utworzonych zasobach. Ć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 2 z 4.
Ile czasu zajmuje lekcja „Provisionery local-exec i remote-exec”?
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