Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
Skonfiguruj program Terraform: jeśli jeszcze tego nie zrobiono, skonfiguruj program Terraform przy użyciu jednej z następujących opcji:
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.
W przykładowym katalogu przejdź do katalogu
src
.Uruchom 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 terraform plan, aby utworzyć plan realizacji.
terraform plan -out main.tfplan
Uruchom terraform show, aby przekonwertować plan wykonania na JSON do kroku zgodności.
terraform show -json main.tfplan > main.tfplan.json
Uruchom docker pull, aby pobrać obraz terraform-compliance.
docker pull eerkunt/terraform-compliance
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
iCreator
.
- 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
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 zgodna 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 terraform show, aby przekonwertować plan wykonania na JSON do kroku zgodności.
terraform show -json main.tfplan > main.tfplan.json
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
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>
.
- Grupa zasobów jest tworzona z nazwą zgodnie ze wzorem:
Rozwiązywanie problemów z programem Terraform na platformie Azure
Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure