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.
Skonfiguruj narzędzie Terraform: jeśli jeszcze tego nie zrobiono, skonfiguruj program Terraform przy użyciu jednej z następujących opcji:
- Konfigurowanie narzędzia Terraform w usłudze Azure Cloud Shell przy użyciu powłoki Bash
- Konfigurowanie programu Terraform w usłudze Azure Cloud Shell przy użyciu programu PowerShell
- Konfigurowanie programu Terraform w systemie Windows przy użyciu powłoki Bash
- Konfigurowanie programu Terraform w systemie Windows przy użyciu programu PowerShell
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.
W przykładowym katalogu przejdź do
src
katalogu.Uruchom polecenie terraform init , aby zainicjować katalog roboczy.
terraform init
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.
Uruchom plan terraform, aby utworzyć plan wykonania.
terraform plan -out main.tfplan
Uruchom polecenie terraform show , aby przekonwertować plan wykonania na kod JSON na potrzeby kroku zgodności.
terraform show -json main.tfplan > main.tfplan.json
Uruchom polecenie docker pull , aby pobrać obraz terraform-compliance.
docker pull eerkunt/terraform-compliance
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 iCreator
.
- 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ż
Napraw błąd, modyfikując
main.tf
w następujący sposób (w przypadku dodania taguRole
iCreator
).tags = { Environment = "dev" Application = "Azure Compliance" Creator = "Azure Compliance" Role = "Azure Compliance" }
Kluczowe punkty:
- Konfiguracja jest teraz zgodne z zasadami.
5. Sprawdź wyniki
Uruchom ponownie polecenie
terraform validate
, aby zweryfikować składnię.terraform validate
Uruchom ponownie polecenie
terraform plan
, aby utworzyć nowy plan wykonania.terraform plan -out main.tfplan
Uruchom polecenie terraform show , aby przekonwertować plan wykonania na kod JSON na potrzeby kroku zgodności.
terraform show -json main.tfplan > main.tfplan.json
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
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>
: .
- Grupa zasobów jest tworzona z nazwą następującą
Rozwiązywanie problemów z programem Terraform na platformie Azure
Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure