Testy integracyjne zasobów chmurowych
Zaimplementuj testy integracyjne, aby sprawdzać poprawność wdrażania i działania rzeczywistych zasobów chmurowych tworzonych przez Terraform.
Testy integracyjne zasobów chmurowych to bezpłatna lekcja DevOps Bootcamp 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 DevOps Bootcamp, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Czym jest testowanie integracyjne?
Witamy! W tej lekcji omówimy testowanie integracyjne konfiguracji Terraform. W przeciwieństwie do testów jednostkowych, które sprawdzają poszczególne komponenty w izolacji, testy integracyjne weryfikują, czy wiele części infrastruktury współdziała ze sobą prawidłowo.
W przypadku Terraform oznacza to wdrażanie rzeczywistych zasobów chmurowych, a następnie sprawdzanie ich działania i wzajemnych interakcji.
Dlaczego warto testować Terraform integracyjnie?
Testy integracyjne mają kluczowe znaczenie w przypadku Terraform, ponieważ dają pewność, że kod:
- Wdraża zasoby prawidłowo: Weryfikuje, czy zasoby są tworzone zgodnie z oczekiwaniami.
- Działa zgodnie z przeznaczeniem: Sprawdza funkcjonalność, a nie tylko składnię.
- Obsługuje zależności: Zapewnia, że powiązane zasoby mogą się ze sobą komunikować.
- Zapobiega regresjom: Wykrywa problemy pojawiające się po wprowadzeniu zmian.
Chodzi o testowanie rzeczywistego rozwiązania w kontrolowanym środowisku.
Przedstawiamy Terratest
Choć można pisać własne skrypty, najpopularniejszym narzędziem do testowania integracyjnego Terraform jest Terratest. To biblioteka Go typu open source opracowana przez HashiCorp.
Terratest umożliwia:
- Pisanie kodu Go wdrażającego Terraform.
- Wykonywanie asercji dotyczących wdrożonych zasobów.
- Usuwanie zasobów po zakończeniu testów.
Udostępnia funkcje pomocnicze do interakcji z Terraform, interfejsami API chmury i innymi usługami.
Konfigurowanie Terratest
Aby korzystać z Terratest, muszą mieć Państwo zainstalowane Go. Gdy Go będzie gotowe, należy utworzyć nowy moduł Go na potrzeby testów:
1. Utworzyć katalog na testy (np. test/).
2. Zainicjować w nim moduł Go:
cd test
go mod init my_tf_testsDodawanie zależności Terratest
Po zainicjowaniu modułu Go należy dodać Terratest jako zależność. To polecenie pobiera bibliotekę i aktualizuje plik go.mod:
go get github.com/gruntwork-io/terratest/modules/terraformNasz testowy moduł Terraform
Utwórzmy prostą konfigurację Terraform, którą chcemy przetestować. Będzie to podstawowy bucket S3. Należy zapisać ją jako s3-module/main.tf:
resource "aws_s3_bucket" "example" {
bucket = "my-unique-test-bucket-12345"
tags = {
Environment = "test"
ManagedBy = "Terraform"
}
}Pisanie pierwszego testu Terratest
Teraz napiszmy plik testowy Go. Należy utworzyć plik taki jak test/s3_test.go. Najważniejsze kroki to:
- Zdefiniowanie opcji Terraform (ścieżki do konfiguracji).
- Zainicjowanie i zastosowanie Terraform.
- Wykonanie asercji.
- Usunięcie zasobów.
Zapewnia to czysty stan po każdym uruchomieniu testu.
Terratest: Init, Apply i Assert
Oto kod Go testu naszego bucketu S3. Zwróćmy uwagę, że używamy terraform.InitAndApply do aprowizowania infrastruktury, a następnie pobieramy wartości wyjściowe lub wywołujemy interfejsy API AWS w celu wykonania asercji.
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/aws"
"github.com/gruntwork-io/terratest/modules/terraform"
"github.com/stretchr/testify/assert"
)
func TestS3BucketCreation(t *testing.T) {
t.Parallel()
terraformOptions := &terraform.Options{
TerraformDir: "../s3-module",
}
// Defer destroy to ensure cleanup
defer terraform.Destroy(t, terraformOptions)
// Init and apply Terraform
terraform.InitAndApply(t, terraformOptions)
// Get the bucket name directly from the config or outputs
bucketName := "my-unique-test-bucket-12345"
// Assertions
aws.AssertS3BucketExists(t, "us-east-1", bucketName)
tags := aws.GetS3BucketTags(t, "us-east-1", bucketName)
assert.Equal(t, "test", tags["Environment"])
}Uruchamianie testu integracyjnego
Aby uruchomić test Terratest, należy przejść w terminalu do katalogu test/ i wykonać polecenie testowe Go. Flaga -v wyświetla szczegółowe dane wyjściowe.
Terratest wykona następujące czynności:
- Zainicjuje Terraform.
- Zastosuje konfigurację.
- Wykona asercje.
- Usunie utworzone zasoby.
cd test
go test -vNajlepsze praktyki dotyczące testów integracyjnych
Podczas skutecznego testowania integracyjnego warto pamiętać o następujących wskazówkach:
- Izolacja: Należy używać unikatowych nazw lub losowych przyrostków zasobów, aby uniknąć konfliktów.
- Sprzątanie: Zawsze należy usuwać zasoby po zakończeniu testów (
defer terraform.Destroy). - Koszty: Należy uwzględniać koszty zasobów. Warto używać małych i niedrogich zasobów.
- Szybkość: Testy integracyjne są wolniejsze od jednostkowych. Należy uruchamiać je rzadziej, na przykład w CI/CD.
- Realizm: Testy powinny korzystać z tego samego środowiska chmurowego (lub dedykowanego konta testowego), do którego będą wdrażane zasoby.
Sprawdź swoją wiedzę
Jakie są główne korzyści z używania testów integracyjnych dla konfiguracji Terraform?
Podsumowanie: testowanie integracyjne
Poznali Państwo testowanie integracyjne Terraform! Omówiliśmy:
- Czym są testy integracyjne i dlaczego mają kluczowe znaczenie dla Terraform.
- Jak Terratest, biblioteka Go, pomaga w pisaniu takich testów.
- Podstawowy przebieg pracy: konfiguracja, zastosowanie, asercja i usunięcie.
- Najważniejsze praktyki tworzenia skutecznych i ekonomicznych testów integracyjnych.
Testy integracyjne dają pewność, że infrastruktura działa prawidłowo w rzeczywistych warunkach.
Często zadawane pytania
Czy lekcja „Testy integracyjne zasobów chmurowych” jest bezpłatna?
Tak — pełny tekst „Testy integracyjne zasobów chmurowych” 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 DevOps Bootcamp, przejdź na CoddyKit PRO. Kurs DevOps Bootcamp zawiera 4 lekcji w sumie.
Co nauczysz się w „Testy integracyjne zasobów chmurowych”?
Zaimplementuj testy integracyjne, aby sprawdzać poprawność wdrażania i działania rzeczywistych zasobów chmurowych tworzonych przez Terraform. Ćwiczysz DevOps Bootcamp 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ąć DevOps Bootcamp?
Nie wymagamy żadnego doświadczenia. DevOps Bootcamp 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 „Testy integracyjne zasobów chmurowych”?
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 DevOps Bootcamp?
Tak. Każda lekcja DevOps Bootcamp 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
- `validate` i `fmt` w Terraform
- Testy jednostkowe za pomocą Terratest
- Testy integracyjne zasobów chmurowych
- Policy as Code i kontrole zgodności