Megfelelőségi tesztelés implementálása a Terraform és az Azure használatával

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 megfelelőségi tesztelés sokszor a folyamatos integrációs folyamat része, és a felhasználó által meghatározott szabályzatok betartásának biztosítására szolgál. Meghatározhatja például az Azure-erőforrások geopolitikai elnevezési konvencióit. Egy másik gyakori példa a virtuális gépek létrehozása a képek meghatározott részhalmazából. A megfelelőségi tesztelés a szabályok kikényszerítésére szolgál ezekben és sok más forgatókönyvben.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • A megfelelőségi tesztelés használatának ismertetése
  • Ismerje meg, hogyan hajthat végre megfelelőségi tesztet
  • Példamegfelelési teszt megtekintése és futtatása

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.
  • Docker:Telepítse a Dockert.

  • Python:A Python telepítése.

  • Terraform-megfelelőségi eszköz: Telepítse a Terraform megfelelőségi eszközt a következő parancs futtatásával: pip install terraform-compliance.

  • Példakód és erőforrások: A DownGit eszközzel töltse le a GitHubról a megfelelőségi 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 megfelelőség tesztelésének és ellenőrzésének ismertetése

A megfelelőségi tesztelés nem funkcionális tesztelési technika, amely meghatározza, hogy egy rendszer megfelel-e az előírt szabványoknak. A megfelelőségi tesztelést megfelelőségi tesztelésnek is nevezik.

A legtöbb szoftvercsapat elemzést végez annak ellenőrzéséhez, hogy a szabványok megfelelően vannak-e érvényesítve és implementálva. Gyakran egyidejűleg dolgozik azon szabványok javítása érdekében, amelyek viszont jobb minőséget eredményeznek.

A megfelelőségi teszteléssel két fontos fogalmat kell figyelembe venni: a megfelelőségi tesztelést és a megfelelőségi ellenőrzéseket.

  • A megfelelőségi tesztelés biztosítja, hogy az egyes fejlesztési életciklus-fázisok kimenete megfeleljen az elfogadott követelményeknek.
  • A megfelelőségi ellenőrzéseket a projektek elején integrálni kell a fejlesztési ciklusba. A megfelelőségi ellenőrzések későbbi szakaszában való hozzáadása egyre nehezebbé válik, ha maga a követelmény nem dokumentált megfelelően.

A megfelelőségi ellenőrzések elvégzése egyenesen előrehaladt. A fejlesztési életciklus minden fázisához szabványokat és eljárásokat fejlesztenek ki és dokumentálnak. Az egyes fázisok kimenetét összehasonlítjuk a dokumentált követelményekkel. A vizsgálat eredményei olyan "rések", amelyek nem felelnek meg az előre meghatározott szabványoknak. A megfelelőség tesztelése az ellenőrzési folyamaton keresztül történik, és a felülvizsgálati folyamat eredményét dokumentálni kell.

Tekintsünk meg egy konkrét példát.

Gyakori probléma az olyan környezetek, amelyek megszakadnak, ha több fejlesztő nem kompatibilis módosításokat alkalmaz. Tegyük fel, hogy egy személy dolgozik egy módosításon, és olyan erőforrásokat alkalmaz, mint például virtuális gép létrehozása tesztkörnyezetben. Ezután egy másik személy a kód egy másik verzióját alkalmazza, amely az adott virtuális gép eltérő verzióját helyezi üzembe. Itt az a felügyelet szükséges, amely biztosítja a meghatározott szabályoknak való megfelelést.

A probléma megoldásának egyik módja az erőforrások címkézésére vonatkozó szabályzat meghatározása – például a címkékkel és creator a címkékkelrole. A szabályzatok definiálása után a rendszer egy olyan eszközt használ, mint a Terraform-megfelelőség , amely biztosítja a szabályzatok betartását.

A Terraform-megfelelőség a negatív tesztelésre összpontosít. A negatív tesztelés annak biztosítása, hogy a rendszer kecsesen kezelje a váratlan bemeneteket vagy a nemkívánatos viselkedést. A fuzzing egy példa a negatív tesztelésre. A fuzzing használatával a rendszer teszteli a bemenetet fogadó rendszert, hogy biztonságosan kezelje a váratlan bemeneteket.

Szerencsére a Terraform egy absztrakciós réteg minden olyan API számára, amely felhőinfrastruktúra-entitásokat hoz létre, frissít vagy megsemmisít. A Terraform azt is biztosítja, hogy a helyi konfiguráció és a távoli API-válaszok szinkronban legyenek. Mivel a Terraformot többnyire felhőalapú API-khoz használják, továbbra is szükség van egy olyan módszerre, amellyel biztosítható, hogy az infrastruktúrán üzembe helyezett kód meghatározott szabályzatokat kövessen. A Terraform-megfelelőség – egy ingyenes és nyílt forráskódú eszköz – ezt a funkciót biztosítja a Terraform-konfigurációkhoz.

A virtuálisgép-példában egy megfelelőségi szabályzat a következő lehet: "Ha Azure-erőforrást hoz létre, annak címkét kell tartalmaznia".

A Terraform-megfelelőségi eszköz egy tesztelési keretrendszert biztosít, ahol a példához hasonló szabályzatokat hozhat létre. Ezután futtatja ezeket a szabályzatokat a Terraform végrehajtási terven.

A Terraform-megfelelőség lehetővé teszi a BDD vagy a viselkedésalapú fejlesztés alapelveinek alkalmazását. A BDD egy együttműködésen alapuló folyamat, amelyben minden érdekelt fél együttműködve határozza meg, hogy mit kell tennie egy rendszernek. Ezek az érdekelt felek általában magukban foglalják a fejlesztőket, tesztelőket és bárkit, aki érdeklődik a fejlesztendő rendszer iránt, vagy akiket érint a rendszer. A BDD célja, hogy ösztönözze a csapatokat olyan konkrét példák létrehozására, amelyek a rendszer viselkedésének általános megértését fejezik ki.

3. Egy megfelelőségi teszt példájának vizsgálata

Korábban ebben a cikkben egy megfelelőségi tesztelési példáról olvashat, amely egy virtuális gép tesztelési környezethez való létrehozását ismerteti. Ez a szakasz bemutatja, hogyan fordíthatja le ezt a példát egy BDD-funkcióra és forgatókönyvre. A szabályt először uborka használatával fejezik ki, amely a BDD támogatására szolgáló eszköz.

when creating Azure resources, every new resource should have a tag

Az előző szabály a következőképpen lesz lefordítva:

If the resource supports tags
Then it must contain a tag
And its value must not be null

A Terraform HCL-kód ezután az alábbiak szerint követi a szabályt.

resource "random_uuid" "uuid" {}

resource "azurerm_resource_group" "rg" {
  name     = "rg-hello-tf-${random_uuid.uuid.result}"
  location = var.location

  tags = {
    environment = "dev"
    application = "Azure Compliance"
  } 
}

Az első szabályzat az alábbiak szerint írható BDD-funkcióforgatókönyvként:

Feature: Test tagging compliance  # /target/src/features/tagging.feature
    Scenario: Ensure all resources have tags
        If the resource supports tags
        Then it must contain a tag
        And its value must not be null

Az alábbi kód egy adott címke tesztelését mutatja be:

Scenario Outline: Ensure that specific tags are defined
    If the resource supports tags
    Then it must contain a tag <tags>
    And its value must match the "<value>" regex

    Examples:
      | tags        | value              |
      | Creator     | .+                 |
      | Application | .+                 |
      | Role        | .+                 |
      | Environment | ^(prod\|uat\|dev)$ |

4. Futtassa a megfelelőségi teszt példáját

Ebben a szakaszban letöltheti és tesztelheti a példát.

  1. A példakönyvtárban keresse meg a src könyvtárat.

  2. Futtassa a terraform init parancsot a munkakönyvtár inicializálásához.

    terraform init
    
  3. A terraform-ellenőrzés futtatásával ellenőrizze a konfigurációs fájlok szintaxisát.

    terraform validate
    

    Főbb pontok:

    • Megjelenik egy üzenet, amely jelzi, hogy a Terraform-konfiguráció érvényes.
  4. Végrehajtási terv létrehozásához futtassa a Terraform-tervet .

    terraform plan -out main.tfplan
    
  5. A terraform show futtatásával a végrehajtási tervet JSON-ra konvertálhatja a megfelelőségi lépéshez.

    terraform show -json main.tfplan > main.tfplan.json
    
  6. A Terraform-megfelelőségi rendszerkép letöltéséhez futtassa a Docker-lekérést .

    docker pull eerkunt/terraform-compliance
    
  7. A docker-futtatás futtatásával futtathatja a teszteket egy Docker-tárolóban.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Főbb pontok:

    • A teszt sikertelen lesz, mert – bár az első szabály, amely megköveteli a címkék meglétét – a második szabály meghiúsul abban az esetben, ha a RoleCreator címkék hiányoznak.

    Example of a failed test

  8. Javítsa ki a hibát az alábbi módosítással main.tf (ahol a rendszer hozzáad egy címkét RoleCreator ).

      tags = {
        Environment = "dev"
        Application = "Azure Compliance"
        Creator     = "Azure Compliance"
        Role        = "Azure Compliance"
      } 
    
    

    Főbb pontok:

    • A konfiguráció most már megfelel a szabályzatnak.

5. Az eredmények ellenőrzése

  1. Futtassa terraform validate újra a szintaxis ellenőrzéséhez.

    terraform validate
    
  2. Futtassa terraform plan újra egy új végrehajtási terv létrehozásához.

    terraform plan -out main.tfplan
    
  3. A terraform show futtatásával a végrehajtási tervet JSON-ra konvertálhatja a megfelelőségi lépéshez.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Futtassa újra a Docker-futtatás parancsot a konfiguráció teszteléséhez. Ha a teljes specifikáció implementálva van, a teszt sikeres lesz.

    docker run --rm -v $PWD:/target -it eerkunt/terraform-compliance -f features -p main.tfplan.json
    

    Example of a successful test

  5. A végrehajtási terv alkalmazásához futtassa a terraformát .

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Főbb pontok:

    • A rendszer létrehoz egy erőforráscsoportot a következő névvel: rg-hello-tf-<random_number>.

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