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 omówiono sposób wykonywania następujących zadań:

  • 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 do zgodności narzędzia 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 są "lukami" niezgodnymi ze wstępnie 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 przerywają stosowanie niezgodnych zmian przez wielu deweloperów. Załóżmy, że jedna osoba pracuje nad zmianą i stosuje zasoby, takie jak tworzenie maszyny wirtualnej w środowisku testowym. Inna osoba stosuje następnie inną wersję kodu, która aprowizuje inną wersję tej 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. Rozmycie jest przykładem negatywnych testów. W przypadku rozmytego systemu odbierającego dane wejściowe są testowane w celu zapewnienia, że może bezpiecznie obsługiwać nieoczekiwane dane wejściowe.

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 uruchomisz te zasady względem planu wykonywania programu 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. Osoby biorące udział w projekcie zazwyczaj obejmują deweloperów, testerów i każdego, kto ma duże zainteresowanie - lub kto będzie miał na nie wpływ - opracowywany system. 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 funkcję I scenariusz BDD. Reguła jest po raz pierwszy wyrażona przy użyciu ogórka, który jest narzędziem używanym do obsługi usługi 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 compliance-test

W tej sekcji pobierzesz i przetestujesz przykład.

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

  2. Uruchom polecenie 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 plan terraform, aby utworzyć plan wykonania.

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

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

    docker pull eerkunt/terraform-compliance
    
  7. Uruchom polecenie docker run , aby uruchomić testy w kontenerze platformy 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ż — podczas gdy pierwsza reguła wymagająca istnienia tagów powiedzie się — druga reguła kończy się niepowodzeniem, ponieważ Role brakuje tagów i Creator .

    Example of a failed test

  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 zgodne 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 polecenie terraform show , aby przekonwertować plan wykonania na kod JSON na potrzeby kroku zgodności.

    terraform show -json main.tfplan > main.tfplan.json
    
  4. Uruchom ponownie polecenie docker, 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
    

    Example of a successful test

  5. Uruchom narzędzie terraform zastosuj, aby zastosować plan wykonania.

    terraform apply main.tfplan -target=random_uuid.uuid
    

    Kluczowe punkty:

    • Grupa zasobów jest tworzona z nazwą następującą 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

Następne kroki