Implementowanie testów integracji dla projektów programu Terraform na platformie 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.

Testy integracji sprawdzają, czy nowo wprowadzona zmiana kodu nie przerywa istniejącego kodu. W metodyce DevOps ciągła integracja (CI) odnosi się do procesu, który kompiluje cały system za każdym razem, gdy baza kodu zostanie zmieniona — na przykład osoba, która chce scalić żądanie ściągnięcia z repozytorium Git. Poniższa lista zawiera typowe przykłady testów integracji:

  • Narzędzia do analizy kodu statycznego, takie jak lint i format.
  • Uruchom narzędzie terraform validate , aby zweryfikować składnię pliku konfiguracji.
  • Uruchom plan terraform, aby upewnić się, że konfiguracja będzie działać zgodnie z oczekiwaniami.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Poznaj podstawy testowania integracji dla projektów programu Terraform.
  • Konfigurowanie potoku ciągłej integracji za pomocą usługi Azure DevOps.
  • Uruchom analizę kodu statycznego w kodzie programu Terraform.
  • Uruchom polecenie terraform validate , aby zweryfikować pliki konfiguracji programu Terraform na komputerze lokalnym.
  • Uruchom polecenie terraform plan , aby sprawdzić, czy pliki konfiguracji programu Terraform z perspektywy usług zdalnych.
  • Użyj usługi Azure Pipeline, aby zautomatyzować ciągłą integrację.

1. Konfigurowanie środowiska

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Organizacja i projekt usługi Azure DevOps: jeśli jej nie masz, utwórz organizację usługi Azure DevOps.

  • Rozszerzenie Terraform Build & Release Tasks: zainstaluj rozszerzenie zadań kompilacji/wydania narzędzia Terraform w organizacji usługi Azure DevOps.

  • Udzielanie usłudze Azure DevOps dostępu do subskrypcji platformy Azure: utwórz połączenie usługi platformy Azure o nazwie terraform-basic-testing-azure-connection , aby umożliwić usłudze Azure Pipelines łączenie się z subskrypcjami platformy Azure

  • Przykładowy kod i zasoby: pobierz z usługi GitHub projekt testowania integracji. Katalog, w którym pobierasz przykład, jest określany jako przykładowy katalog.

2. Zweryfikuj lokalną konfigurację programu Terraform

Polecenie terraform validate jest uruchamiane z wiersza polecenia w katalogu zawierającym pliki terraform. To polecenie służy do sprawdzania poprawności składni.

  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. Edytuj plik main.tf.

  5. W wierszu 5 wstaw literówkę, która unieważnia składnię. Na przykład zastąp ciąg var.location ciągiem var.loaction

  6. Zapisz plik.

  7. Uruchom walidację ponownie.

    terraform validate
    

    Kluczowe punkty:

    • Zostanie wyświetlony komunikat o błędzie wskazujący wiersz kodu w błędzie i opis błędu.

Jak widać, narzędzie Terraform wykryło problem ze składnią kodu konfiguracji. Ten problem uniemożliwia wdrożenie konfiguracji.

Dobrym rozwiązaniem jest zawsze uruchamianie terraform validate plików terraform przed wypchnięciem ich do systemu kontroli wersji. Ponadto ten poziom weryfikacji powinien być częścią potoku ciągłej integracji. W dalszej części tego artykułu dowiesz się, jak skonfigurować potok platformy Azure w celu automatycznego weryfikowania.

3. Weryfikowanie konfiguracji narzędzia Terraform

W poprzedniej sekcji pokazano, jak zweryfikować konfigurację programu Terraform. Ten poziom testowania był specyficzny dla składni. Ten test nie uwzględniał tego, co można już wdrożyć na platformie Azure.

Terraform to język deklaratywny, co oznacza, że deklarujesz, co chcesz uzyskać jako wynik końcowy. Załóżmy na przykład, że masz 10 maszyn wirtualnych w grupie zasobów. Następnie utworzysz plik Terraform definiujący trzy maszyny wirtualne. Zastosowanie tego planu nie zwiększa całkowitej liczby do 13. Zamiast tego narzędzie Terraform usuwa siedem z maszyn wirtualnych, aby zakończyć się trzema. Uruchomienie terraform plan pozwala potwierdzić potencjalne wyniki zastosowania planu wykonania, aby uniknąć niespodzianek.

Aby wygenerować plan wykonywania programu Terraform, uruchom plan terraform. To polecenie łączy się z docelową subskrypcją platformy Azure, aby sprawdzić, która część konfiguracji została już wdrożona. Narzędzie Terraform określa następnie niezbędne zmiany, aby spełnić wymagania określone w pliku Terraform. Na tym etapie narzędzie Terraform nie wdraża żadnych elementów. Mówi ci, co się stanie, jeśli zastosujesz plan.

Jeśli korzystasz z artykułu i wykonano kroki opisane w poprzedniej sekcji, uruchom terraform plan polecenie:

terraform plan

Po uruchomieniu terraform plannarzędzia Terraform wyświetla potencjalny wynik zastosowania planu wykonania. Dane wyjściowe wskazują zasoby platformy Azure, które zostaną dodane, zmienione i zniszczone.

Domyślnie program Terraform przechowuje stan w tym samym katalogu lokalnym co plik Terraform. Ten wzorzec działa dobrze w scenariuszach pojedynczego użytkownika. Jeśli jednak wiele osób pracuje nad tymi samymi zasobami platformy Azure, lokalne pliki stanu mogą wyjść z synchronizacji. Aby rozwiązać ten problem, program Terraform obsługuje zapisywanie plików stanu w zdalnym magazynie danych (takim jak usługa Azure Storage). W tym scenariuszu może być problematyczne uruchomienie terraform plan na komputerze lokalnym i skierowanie maszyny zdalnej. W związku z tym warto zautomatyzować ten krok weryfikacji w ramach potoku ciągłej integracji.

4. Uruchamianie statycznej analizy kodu

Analizę kodu statycznego można wykonać bezpośrednio w kodzie konfiguracji programu Terraform bez jego wykonywania. Ta analiza może być przydatna do wykrywania problemów, takich jak problemy z zabezpieczeniami i niespójność zgodności.

Następujące narzędzia zapewniają analizę statyczną plików programu Terraform:

Analiza statyczna jest często wykonywana w ramach potoku ciągłej integracji. Te testy nie wymagają utworzenia planu wykonania ani wdrożenia. W rezultacie działają one szybciej niż inne testy i są zazwyczaj uruchamiane jako pierwsze w procesie ciągłej integracji.

5. Automatyzowanie testów integracji przy użyciu usługi Azure Pipeline

Ciągła integracja obejmuje testowanie całego systemu po wprowadzeniu zmiany. W tej sekcji zostanie wyświetlona konfiguracja usługi Azure Pipeline używana do implementowania ciągłej integracji.

  1. Korzystając z wybranego edytora, przejdź do lokalnego klonu przykładowego projektu Terraform w witrynie GitHub.

  2. Otwórz plik samples/integration-testing/src/azure-pipeline.yaml.

  3. Przewiń w dół do sekcji kroków , w której zostanie wyświetlony standardowy zestaw kroków używanych do uruchamiania różnych procedur instalacji i walidacji.

  4. Przejrzyj wiersz, który odczytuje, Krok 1: uruchom analizę statycznego kodu Checkov. W tym kroku Checkov wspomniany wcześniej projekt uruchamia statyczną analizę kodu w przykładowej konfiguracji narzędzia Terraform.

    - bash: $(terraformWorkingDirectory)/checkov.sh $(terraformWorkingDirectory)
      displayName: Checkov Static Code Analysis
    

    Kluczowe punkty:

    • Ten skrypt jest odpowiedzialny za uruchomienie narzędzia Checkov w obszarze roboczym narzędzia Terraform zainstalowanym w kontenerze platformy Docker. Agenci zarządzani przez firmę Microsoft są włączeni docker. Uruchamianie narzędzi wewnątrz kontenera platformy Docker jest łatwiejsze i eliminuje konieczność zainstalowania narzędzia Checkov na agencie usługi Azure Pipeline.
    • Zmienna jest zdefiniowana $(terraformWorkingDirectory)azure-pipeline.yaml w pliku.
  5. Zapoznaj się z wierszem, który brzmi: Krok 2: instalowanie programu Terraform w agencie usługi Azure Pipelines. Zainstalowane wcześniej rozszerzenie Terraform Build & Release Task ma polecenie instalacji narzędzia Terraform na agencie z uruchomionym potokiem Azure. To zadanie jest wykonywane w tym kroku.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-installer.TerraformInstaller@0
      displayName: 'Install Terraform'
      inputs:
        terraformVersion: $(terraformVersion)
    

    Kluczowe punkty:

    • Wersja programu Terraform do zainstalowania jest określana za pośrednictwem zmiennej usługi Azure Pipeline o nazwie terraformVersion i zdefiniowanej azure-pipeline.yaml w pliku.
  6. Przejrzyj wiersz, który odczytuje, Krok 3. Uruchom narzędzie Terraform init, aby zainicjować obszar roboczy. Teraz, gdy program Terraform jest zainstalowany na agencie, można zainicjować katalog programu Terraform.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform init'
      inputs:
        command: init
        workingDirectory: $(terraformWorkingDirectory)
    

    Kluczowe punkty:

    • Dane command wejściowe określają, które polecenie narzędzia Terraform ma zostać uruchomione.
    • Dane workingDirectory wejściowe wskazują ścieżkę katalogu programu Terraform.
    • Zmienna jest zdefiniowana $(terraformWorkingDirectory)azure-pipeline.yaml w pliku.
  7. Przejrzyj wiersz, który odczytuje, Krok 4. Uruchom narzędzie Terraform validate, aby zweryfikować składnię listy HCL. Po zainicjowaniu katalogu projektu uruchom polecenie , terraform validate aby zweryfikować konfigurację na serwerze.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform validate'
      inputs:
        command: validate
        workingDirectory: $(terraformWorkingDirectory)
    
  8. Przejrzyj wiersz, który odczytuje, Krok 5. Uruchom plan narzędzia Terraform, aby zweryfikować składnię listy HCL. Jak wyjaśniono wcześniej, generowanie planu wykonania jest wykonywane w celu sprawdzenia, czy konfiguracja programu Terraform jest prawidłowa przed wdrożeniem.

    - task: charleszipp.azure-pipelines-tasks-terraform.azure-pipelines-tasks-terraform-cli.TerraformCLI@0
      displayName: 'Run terraform plan'
      inputs:
        command: plan
        workingDirectory: $(terraformWorkingDirectory)
        environmentServiceName: $(serviceConnection)
        commandOptions: -var location=$(azureLocation)
    

    Kluczowe punkty:

    • Dane environmentServiceName wejściowe odnoszą się do nazwy połączenia usługi platformy Azure utworzonego w temacie Konfigurowanie środowiska. Połączenie umożliwia programowi Terraform dostęp do subskrypcji platformy Azure.
    • Dane commandOptions wejściowe są używane do przekazywania argumentów do polecenia narzędzia Terraform. W tym przypadku jest określana lokalizacja. Zmienna jest zdefiniowana $(azureLocation) wcześniej w pliku YAML.

Importowanie potoku do usługi Azure DevOps

  1. Otwórz projekt usługi Azure DevOps i przejdź do sekcji Azure Pipelines.

  2. Wybierz przycisk Utwórz potok .

  3. W polu Gdzie znajduje się twój kod? wybierz pozycję GitHub (YAML).

    Where is your code?

  4. W tym momencie może być konieczne autoryzowanie usługi Azure DevOps w celu uzyskania dostępu do organizacji. Aby uzyskać więcej informacji na temat tego tematu, zobacz artykuł Tworzenie repozytoriów GitHub.

  5. Na liście repozytoriów wybierz rozwidlenie repozytorium utworzonego w organizacji usługi GitHub.

  6. W kroku Konfigurowanie potoku wybierz opcję rozpoczęcia od istniejącego potoku YAML.

    Existing YAML pipeline

  7. Po wyświetleniu strony Wybierz istniejący potok YAML określ gałąź master i wprowadź ścieżkę do potoku YAML: samples/integration-testing/src/azure-pipeline.yaml.

    Select existing YAML pipeline

  8. Wybierz pozycję Kontynuuj , aby załadować potok YAML platformy Azure z usługi GitHub.

  9. Gdy zostanie wyświetlona strona Przeglądanie potoku YAML , wybierz pozycję Uruchom , aby utworzyć i ręcznie wyzwolić potok po raz pierwszy.

    Run Azure Pipeline

Weryfikowanie wyników

Potok można uruchomić ręcznie z poziomu interfejsu użytkownika usługi Azure DevOps. Jednak punktem artykułu jest pokazanie automatycznej ciągłej integracji. Przetestuj proces, zatwierdzając zmianę samples/integration-testing/src w folderze rozwidlenia repozytorium. Zmiana spowoduje automatyczne wyzwolenie nowego potoku w gałęzi, na której wypychasz kod.

Pipeline running from GitHub

Po wykonaniu tego kroku uzyskaj dostęp do szczegółów w usłudze Azure DevOps, aby upewnić się, że wszystko działa prawidłowo.

Azure DevOps Green Pipeline

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