A Terraform-projekteken végzett, végpontok közötti Terratest-tesztelés implementálása

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.

  1. A rendszer konfigurációt alkalmaz egy tesztkörnyezetre.
  2. Az eredmények ellenőrzéséhez kód fut.
  3. A tesztkörnyezet újraincializálva vagy levéve (például egy virtuális gép felszabadítása) történik.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • 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, első lépésként mindössze néhány perc alatt létrehozhat egy ingyenes fiókot.
  • 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 vezénylése szakaszokra
  • 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 nem vm-linux-2 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-1használatával pingelhető vm-linux-2

Sample end-to-end test scenario

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.

Figyelem

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
  • ellenőrzés": Ellenőrzi az ellenőrzés és az állítások
  • 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 Go-kód futtatását terraform init és terraform apply futtatását
  • terraform. Kimenet: Lekéri az üzembehelyezési kimeneti változó értékét.
  • terraform. Megsemmisítés: Futtatja a parancsot a terraform destroy 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.

  1. Nyisson meg egy bash/terminálablakot.

  2. Jelentkezzen be az Azure-fiókjába.

  3. A mintateszt futtatásához szüksége van egy SSH titkos/nyilvános kulcspár nevére id_rsa és id_rsa.pub a kezdőkönyvtárban. Cserélje le <your_user_name> a kezdőkönyvtár nevére.

    export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
    
  4. A példakönyvtárban keresse meg a src/test könyvtárat.

  5. Futtassa a tesztet.

    go test -v ./ -timeout 10m
    

6. Ellenőrizze az eredményeket

A sikeres futtatás go testutá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

További lépések