Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre HCL-szintaxissal. A HCL szintaxissal megadhatja a felhőszolgáltatót – például az Azure-t – és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet , amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.
A teljes körű (E2E) teszteléssel ellenőrzik, hogy egy program működik-e, mielőtt éles környezetben üzembe helyeznénk. Példaforgatókönyv lehet egy Terraform-modul, amely két virtuális gépet helyez üzembe egy virtuális hálózaton. Előfordulhat, hogy meg szeretné akadályozni, hogy a két gép pingelje egymást. Ebben a példában meghatározhat egy tesztet, amely ellenőrzi a tervezett eredményt az üzembe helyezés előtt.
Az E2E-tesztelés általában háromlépéses folyamat.
- A rendszer konfigurációt alkalmaz egy tesztkörnyezetre.
- Az eredmények ellenőrzéséhez kód fut.
- A tesztkörnyezet újra inicializált vagy leállítva van (például egy virtuális gép felszabadítása).
Ebből a cikkből megtudhatja, hogyan:
- A végpontok közötti tesztelés alapjainak megismerése a Terratesttel
- Megtudhatja, hogyan írhat végpontok közötti tesztet a Golang használatával
- Megtudhatja, hogyan aktiválhat automatikusan végpontok közötti teszteket az Azure DevOps használatával, ha a kód az adattárhoz van kötve
1. A környezet konfigurálása
- Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot .
A Terraform konfigurálása: Ha még nem tette meg, konfigurálja a Terraformot az alábbi lehetőségek egyikével:
Go programozási nyelv: Telepítse a Go-t.
Példakód és erőforrások: A DownGit eszközzel töltse le a GitHubról a végpontok közötti tesztelési projektet , és bontsa ki egy új könyvtárba a példakódot. Ezt a könyvtárat nevezzük példakönyvtárnak.
2. A végpontok közötti tesztelés ismertetése
A teljes körű tesztek ellenőrzik, hogy a rendszer kollektív egészként működik-e. Ez a tesztelési típus nem egy adott modul tesztelése. A Terraform-projektek esetében a teljes körű tesztelés lehetővé teszi az üzembe helyezett feladatok ellenőrzését. Ez a tesztelési típus különbözik az üzembe helyezés előtti forgatókönyveket tesztelő számos más típustól. A végpontok közötti tesztek kritikus fontosságúak olyan összetett rendszerek teszteléséhez, amelyek több modult tartalmaznak, és több erőforráson működnek. Ilyen esetekben a végpontok közötti tesztelés az egyetlen módszer annak megállapítására, hogy a különböző modulok megfelelően működnek-e.
Ez a cikk a Terratest használatával valósítja meg a végpontok közötti tesztelést. A Terratest biztosítja az összes olyan vízvezetéket, amely a következő feladat elvégzéséhez szükséges:
- Terraform-konfiguráció üzembe helyezése
- Lehetővé teszi teszt írását a Go nyelv használatával az üzembe helyezett adatok ellenőrzéséhez
- A tesztek szakaszokra szervezése
- Az üzembe helyezett infrastruktúra lebontása
3. A példa tesztelésének ismertetése
Ebben a cikkben az Azure/terraform mintaadattárban elérhető mintát használjuk.
Ez a minta egy Terraform-konfigurációt határoz meg, amely két Linux rendszerű virtuális gépet helyez üzembe ugyanazon a virtuális hálózaton. Egy virtuális gép – neve – vm-linux-1
nyilvános IP-címmel rendelkezik. Csak a 22-s port nyílik meg az SSH-kapcsolatok engedélyezéséhez. A második virtuális gép - vm-linux-2
- nem rendelkezik definiált nyilvános IP-címmel.
A teszt a következő forgatókönyveket ellenőrzi:
- Az infrastruktúra megfelelően van üzembe helyezve
- A 22-s port használatával SSH-munkamenetet nyithat meg a következőre:
vm-linux-1
- Az SSH-munkamenet
vm-linux-1
használatával pingelhetővm-linux-2
Ha letöltötte a mintát, az ehhez a forgatókönyvhöz tartozó Terraform-konfiguráció megtalálható a src/main.tf
fájlban. A main.tf
fájl mindent tartalmaz, ami az előző ábrán szereplő Azure-infrastruktúra üzembe helyezéséhez szükséges.
Ha nem tudja, hogyan hozhat létre virtuális gépet, olvassa el a Linux rendszerű virtuális gép azure-beli infrastruktúrával való létrehozását a Terraform használatával.
Figyelmeztetés
A cikkben bemutatott példaforgatókönyv csak illusztrációs célokra szolgál. Szándékosan egyszerűnek tartottuk a dolgokat, hogy a végpontok közötti teszt lépéseire összpontosítsunk. Nem javasoljuk olyan éles virtuális gépek használatát, amelyek nyilvános IP-címen keresztül teszik elérhetővé az SSH-portokat.
4. Vizsgálja meg a teszt példáját
A végpontok közötti teszt a Go nyelven van megírva, és a Terratest-keretrendszert használja. Ha letöltötte a mintát, a teszt a fájlban src/test/end2end_test.go
lesz definiálva.
Az alábbi forráskód a Terratest használatával végzett Golang-teszt szabványos szerkezetét mutatja be:
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)
})
}
Ahogy az előző kódrészletben látható, a teszt három szakaszból áll:
- beállítás: Futtatja a Terraformot a konfiguráció üzembe helyezéséhez
- érvényesítés": Végrehajtja az érvényesítési ellenőrzéseket és állításokat
- teardown: Megtisztítja az infrastruktúrát a teszt futtatása után
Az alábbi lista a Terratest-keretrendszer által biztosított főbb függvényeket mutatja be:
-
terraform.InitAndApply: Engedélyezi a
terraform init
ésterraform apply
futtatását Go-kódból - terraform. Kimenet: Lekéri az üzembehelyezési kimeneti változó értékét.
-
terraform.Destroy: Lefuttatja a
terraform destroy
parancsot Go-kódból. - test_structure. LoadTerraformOptions: A Terraform-beállítások – például konfiguráció és változók – betöltése az állapotból
- test_structure. SaveTerraformOptions: A Terraform-beállításokat – például konfigurációkat és változókat – menti az állapotba
5. Futtassa a teszt példáját
Az alábbi lépések a mintakonfiguráción és az üzembe helyezésen futtatják a tesztet.
Nyisson meg egy bash/terminálablakot.
Jelentkezzen be az Azure-fiókjába.
A mintateszt futtatásához szüksége van egy SSH titkos/nyilvános kulcspár nevére
id_rsa
ésid_rsa.pub
a kezdőkönyvtárban. Cserélje le<your_user_name>
a saját kezdőkönyvtára nevére.export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
A példakönyvtárban keresse meg a
src/test
könyvtárat.Futtasd a tesztet.
go test -v ./ -timeout 10m
6. Ellenőrizze az eredményeket
A sikeres futtatás go test
után az alábbi kimenethez hasonló eredmények láthatók:
--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok test 391.052s
A Terraform hibaelhárítása az Azure-ban
A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása