Udostępnij za pośrednictwem


Implementowanie testowania zgodności za pomocą programu Terraform i platformy Azure

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania, który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.

Wiele razy testowanie zgodności jest częścią procesu ciągłej integracji i służy do zapewnienia, że są przestrzegane zasady zdefiniowane przez użytkownika. Można na przykład zdefiniować konwencje nazewnictwa geopolitycznego dla zasobów platformy Azure. Innym typowym przykładem jest tworzenie maszyn wirtualnych na podstawie zdefiniowanego podzestawu obrazów. Testowanie zgodności byłoby używane do wymuszania reguł w tych i wielu innych scenariuszach.

W tym artykule dowiesz się, jak:

  • Informacje o tym, kiedy należy używać testowania zgodności
  • Dowiedz się, jak przeprowadzić test zgodności
  • Zobacz i uruchom przykładowy test zgodności

1. Konfigurowanie środowiska

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Docker:Zainstaluj platformę Docker.

  • Python:Zainstaluj język Python.

  • Narzędzie Terraform-compliance: Zainstaluj narzędzie zgodności Terraform, uruchamiając następujące polecenie: pip install terraform-compliance.

  • Przykładowy kod i zasoby: Za pomocą narzędzia DownGit pobierz z usługi GitHub projekt testowania zgodności i rozpakuj go do nowego katalogu, aby zawierał przykładowy kod. Ten katalog jest określany jako przykładowy katalog.

2. Omówienie testowania i sprawdzania zgodności

Testowanie zgodności to niefunkcjonalna technika testowania w celu określenia, czy system spełnia określone standardy. Testowanie zgodności jest również nazywane testowaniem zgodności.

Większość zespołów ds. oprogramowania wykonuje analizę, aby sprawdzić, czy standardy są prawidłowo wymuszane i implementowane. Często praca jednocześnie w celu poprawy standardów, które z kolei prowadzą do zwiększenia jakości.

W przypadku testowania zgodności należy wziąć pod uwagę dwie ważne koncepcje: testowanie zgodności i sprawdzanie zgodności.

  • Testowanie zgodności zapewnia, że dane wyjściowe każdej fazy cyklu projektowania są zgodne z uzgodnionymi wymaganiami.
  • Kontrole zgodności należy zintegrować z cyklem projektowania na początku projektów. Próba dodania kontroli zgodności na późniejszym etapie staje się coraz trudniejsza, gdy samo wymaganie nie jest odpowiednio udokumentowane.

Sprawdzanie zgodności jest proste. Zestaw standardów i procedur jest opracowywany i udokumentowany dla każdej fazy cyklu projektowania. Dane wyjściowe każdej fazy są porównywane z udokumentowanymi wymaganiami. Wyniki testu wskazują na "luki" w zgodności z wcześniej określonymi standardami. Testowanie zgodności odbywa się przez proces inspekcji i należy udokumentować wynik procesu przeglądu.

Przyjrzyjmy się konkretnego przykładu.

Typowym problemem są środowiska, które przestają działać, gdy wielu deweloperów wprowadza niezgodne zmiany. Załóżmy, że jedna osoba pracuje nad zmianą i stosuje zasoby, takie jak tworzenie maszyny wirtualnej w środowisku testowym. Inna osoba następnie stosuje inną wersję kodu, która wdraża różną wersję maszyny wirtualnej. Potrzebny jest tu nadzór nad zapewnieniem zgodności z określonymi zasadami.

Jednym ze sposobów rozwiązania tego problemu byłoby zdefiniowanie zasad tagowania zasobów — takich jak tagi role i .creator Po zdefiniowaniu zasad narzędzie, takie jak Terraform-compliance , jest używane do zapewnienia, że zasady są przestrzegane.

Narzędzie Terraform-compliance koncentruje się na testach negatywnych. Testy ujemne to proces zapewnienia, że system może bezpiecznie obsługiwać nieoczekiwane dane wejściowe lub niepożądane zachowanie. Fuzzing jest przykładem negatywnego testowania. W przypadku fuzzingu system, który otrzymuje dane wejściowe, jest testowany, aby upewnić się, że może bezpiecznie obsługiwać nieoczekiwane dane.

Na szczęście narzędzie Terraform jest warstwą abstrakcji dla dowolnego interfejsu API, który tworzy, aktualizuje lub niszczy jednostki infrastruktury w chmurze. Narzędzie Terraform zapewnia również konfigurację lokalną i odpowiedzi zdalnego interfejsu API są zsynchronizowane. Ponieważ narzędzie Terraform jest najczęściej używane względem interfejsów API chmury, nadal potrzebujemy sposobu zapewnienia, że kod wdrożony w infrastrukturze jest zgodny z określonymi zasadami. Narzędzie Terraform-compliance — bezpłatne narzędzie typu open source — udostępnia te funkcje dla konfiguracji programu Terraform.

Korzystając z przykładu maszyny wirtualnej, zasady zgodności mogą być następujące: "Jeśli tworzysz zasób platformy Azure, musi zawierać tag".

Narzędzie Terraform-compliance udostępnia platformę testową, w której można tworzyć zasady, takie jak przykład. Następnie zastosujesz te zasady weryfikując plan wykonania Terraform.

Narzędzie Terraform-compliance umożliwia stosowanie architektury BDD lub projektowania opartego na zachowaniu. BDD to proces współpracy, w którym wszyscy uczestnicy projektu współpracują ze sobą, aby zdefiniować, co powinien zrobić system. Interesariusze projektu zazwyczaj obejmują deweloperów, testerów i każdego, kto ma związek z systemem - lub kto będzie przez niego dotknięty. Celem usługi BDD jest zachęcanie zespołów do tworzenia konkretnych przykładów, które wyrażają wspólną wiedzę na temat sposobu działania systemu.

3. Badanie przykładu testu zgodności

Wcześniej w tym artykule omówiono przykład testowania zgodności podczas tworzenia maszyny wirtualnej dla środowiska testowego. W tej sekcji pokazano, jak przetłumaczyć ten przykład na cechę i scenariusz BDD. Reguła jest po raz pierwszy wyrażona przy użyciu Cucumber, który jest narzędziem wspierającym BDD.

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

Poprzednia reguła jest tłumaczona w następujący sposób:

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

Kod HCL narzędzia Terraform będzie następnie zgodny z regułą w następujący sposób.

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"
  } 
}

Pierwsze zasady można napisać jako scenariusz funkcji BDD w następujący sposób:

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

Poniższy kod przedstawia test dla określonego tagu:

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. Uruchom przykład testu zgodności

W tej sekcji pobierzesz i przetestujesz przykład.

  1. W przykładowym katalogu przejdź do katalogu src.

  2. Uruchom terraform init, aby zainicjować katalog roboczy.

    terraform init
    
  3. Uruchom narzędzie terraform validate , aby zweryfikować składnię plików konfiguracji.

    terraform validate
    

    Kluczowe punkty:

    • Zostanie wyświetlony komunikat wskazujący, że konfiguracja narzędzia Terraform jest prawidłowa.
  4. Uruchom terraform plan, aby utworzyć plan realizacji.

    terraform plan -out main.tfplan
    
  5. Uruchom terraform show, aby przekonwertować plan wykonania na JSON do kroku zgodności.

    terraform show -json main.tfplan > main.tfplan.json
    
  6. Uruchom docker pull, aby pobrać obraz terraform-compliance.

    docker pull eerkunt/terraform-compliance
    
  7. Uruchom docker run, aby przeprowadzić testy w kontenerze Docker.

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

    Kluczowe punkty:

    • Test zakończy się niepowodzeniem, ponieważ - mimo że pierwsza reguła wymagająca istnienia tagów powiedzie się - druga reguła nie powiedzie się, ponieważ brakuje tagów Role i Creator.

    Przykład testu, który zakończył się niepowodzeniem

  8. Napraw błąd, modyfikując main.tf w następujący sposób (w przypadku dodania tagu Role i Creator ).

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

    Kluczowe punkty:

    • Konfiguracja jest teraz zgodna z zasadami.

5. Sprawdź wyniki

  1. Uruchom ponownie polecenie terraform validate , aby zweryfikować składnię.

    terraform validate
    
  2. Uruchom ponownie polecenie terraform plan , aby utworzyć nowy plan wykonania.

    terraform plan -out main.tfplan
    
  3. Uruchom terraform show, aby przekonwertować plan wykonania na JSON do kroku zgodności.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Uruchom docker run ponownie, aby przetestować konfigurację. Jeśli pełna specyfikacja została zaimplementowana, test zakończy się pomyślnie.

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

    Przykład pomyślnego testu

  5. Uruchom terraform apply, aby wdrożyć plan realizacji.

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Kluczowe punkty:

    • Grupa zasobów jest tworzona z nazwą zgodnie ze wzorem: rg-hello-tf-<random_number>.

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure

Dalsze kroki