Implementace kompletního testování Terratestu v projektech Terraformu
Terraform umožňuje definici, verzi Preview a nasazení cloudové infrastruktury. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění, který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.
Kompletní testování (E2E) slouží k ověření programu před jeho nasazením do produkčního prostředí. Příkladem scénáře může být modul Terraformu, který nasazuje dva virtuální počítače do virtuální sítě. Možná budete chtít těmto dvěma počítačům zabránit ve vzájemném ping. V tomto příkladu můžete definovat test, který ověří zamýšlený výsledek před nasazením.
Testování E2E je obvykle třístupňový proces.
- Konfigurace se použije v testovacím prostředí.
- Kód se spustí, aby se ověřily výsledky.
- Testovací prostředí se buď znovu inicializuje, nebo se převezme (například uvolnění virtuálního počítače).
V tomto článku získáte informace o těchto tématech:
- Vysvětlení základů kompletního testování pomocí Terratestu
- Naučte se psát kompletní test pomocí jazyka Go
- Naučte se používat Azure DevOps k automatické aktivaci kompletních testů při potvrzení kódu do úložiště.
1. Konfigurace prostředí
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
Nakonfigurujte Terraform: Pokud jste to ještě neudělali, nakonfigurujte Terraform pomocí jedné z následujících možností:
Programovací jazyk Go: Nainstalujte Go.
Příklad kódu a prostředků: Pomocí nástroje DownGit stáhněte z GitHubu kompletní projekt testování a rozbalte ho do nového adresáře, který bude obsahovat ukázkový kód. Tento adresář se označuje jako ukázkový adresář.
2. Principy kompletního testování
Kompletní testy ověřují, že systém funguje jako celek. Tento typ testování je na rozdíl od testování konkrétních modulů. U projektů Terraformu umožňuje kompletní testování ověření nasazeného souboru. Tento typ testování se liší od mnoha dalších typů, které testují scénáře před nasazením. Komplexní testy jsou důležité pro testování složitých systémů, které obsahují více modulů a pracují s více prostředky. V takových scénářích je kompletní testování jediným způsobem, jak určit, jestli různé moduly interagují správně.
Tento článek se zaměřuje na použití Terratestu k implementaci kompletního testování. Terratest poskytuje všechny instalatéry, které jsou potřeba k provedení následující úlohy:
- Nasazení konfigurace Terraformu
- Umožňuje napsat test pomocí jazyka Go a ověřit, co bylo nasazeno.
- Orchestrace testů do fází
- Odbourání nasazené infrastruktury
3. Vysvětlení příkladu testu
Pro účely tohoto článku používáme ukázku dostupnou v ukázkovém úložišti Azure nebo terraformu.
Tato ukázka definuje konfiguraci Terraformu, která nasadí dva virtuální počítače s Linuxem do stejné virtuální sítě. Jeden virtuální počítač s názvem vm-linux-1
má veřejnou IP adresu. Otevře se jenom port 22, který povolí připojení SSH. Druhý virtuální počítač – vm-linux-2
nemá definovanou veřejnou IP adresu.
Test ověří následující scénáře:
- Infrastruktura se správně nasadí.
- Pomocí portu 22 je možné otevřít relaci SSH pro
vm-linux-1
- Pomocí relace SSH na
vm-linux-1
, je možné pingvm-linux-2
Pokud jste si ukázku stáhli, najdete v souboru konfiguraci Terraformu src/main.tf
. Soubor main.tf
obsahuje vše potřebné k nasazení infrastruktury Azure reprezentované na předchozím obrázku.
Pokud nevíte, jak vytvořit virtuální počítač, přečtěte si téma Vytvoření virtuálního počítače s Linuxem s infrastrukturou v Azure pomocí Terraformu.
Upozornění
Ukázkový scénář uvedený v tomto článku je určen pouze pro ilustraci. Účelně jsme věci zjednodušili, abychom se mohli zaměřit na kroky kompletního testu. Nedoporučujeme mít produkční virtuální počítače, které zpřístupňují porty SSH přes veřejnou IP adresu.
4. Prozkoumání testovacího příkladu
Kompletní test je napsaný v jazyce Go a používá architekturu Terratest. Pokud jste si ukázku stáhli, test se definuje v src/test/end2end_test.go
souboru.
Následující zdrojový kód ukazuje standardní strukturu testu jazyka Go pomocí Terratestu:
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
test_structure "github.com/gruntwork-io/terratest/modules/test-structure"
)
func TestEndToEndDeploymentScenario(t *testing.T) {
t.Parallel()
fixtureFolder := "../"
// Use Terratest to deploy the infrastructure
test_structure.RunTestStage(t, "setup", func() {
terraformOptions := &terraform.Options{
// Indicate the directory that contains the Terraform configuration to deploy
TerraformDir: fixtureFolder,
}
// Save options for later test stages
test_structure.SaveTerraformOptions(t, fixtureFolder, terraformOptions)
// Triggers the terraform init and terraform apply command
terraform.InitAndApply(t, terraformOptions)
})
test_structure.RunTestStage(t, "validate", func() {
// run validation checks here
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
publicIpAddress := terraform.Output(t, terraformOptions, "public_ip_address")
})
// When the test is completed, teardown the infrastructure by calling terraform destroy
test_structure.RunTestStage(t, "teardown", func() {
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
terraform.Destroy(t, terraformOptions)
})
}
Jak vidíte v předchozím fragmentu kódu, test se skládá ze tří fází:
- nastavení: Spustí Terraform a nasadí konfiguraci.
- validate': Provádí ověřovací kontroly a kontrolní výrazy.
- slzy: Po spuštění testu vyčistí infrastrukturu.
Následující seznam ukazuje některé klíčové funkce poskytované architekturou Terratest:
- terraform. InitAndApply: Povolí spouštění
terraform init
aterraform apply
z kódu Go. - terraform. Výstup: Načte hodnotu výstupní proměnné nasazení.
- terraform. Destroy: Spustí
terraform destroy
příkaz z kódu Go. - test_structure. LoadTerraformOptions: Načte z stavu možnosti Terraformu , jako je konfigurace a proměnné.
- test_structure. SaveTerraformOptions: Uloží možnosti Terraformu – například konfigurace a proměnné – do stavu.
5. Spuštění testovacího příkladu
Následující kroky spustí test s ukázkovou konfigurací a nasazením.
Otevřete okno bash/terminálu.
Přihlaste se ke svému účtu Azure.
Ke spuštění tohoto ukázkového testu potřebujete název
id_rsa
páru privátního nebo veřejného klíče SSH aid_rsa.pub
v domovském adresáři. Nahraďte<your_user_name>
názvem domovského adresáře.export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
V ukázkovém adresáři přejděte do
src/test
adresáře.Spusťte test.
go test -v ./ -timeout 10m
6. Ověření výsledků
Po úspěšném spuštění go test
se zobrazí výsledky podobné následujícímu výstupu:
--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok test 391.052s
Řešení potíží s Terraformem v Azure
Řešení běžných problémů při používání Terraformu v Azure