Wprowadzenie
Ostatnim razem rozmawialiśmy o podejściu do sieci w Microsoft Azure. Jedną z rekomendowanych topologii sieci przez Microsoft jest Hub and spoke. Więcej o tej topologii oraz jej ręcznym wdrożeniu dowiesz się z mojego poprzedniego wpisu –Azure Networking: Hub’n’Spoke korzystając z VPN gateway • Maciej Poborca. Dzisiaj natomiast powtórzymy tę operację wdrożenia, jednakże korzystając z podejścia IaC – czyli infrastruktury jako kodu. Całość wykonamy wykorzystując język Terraform od Hashicorpa – Terraform by HashiCorp.
Uruchomienie
W dzisiejszym wpisie będziemy wykorzystywać kod, który znajduje się na moim Githubie oraz może być w łatwy sposób uruchomiony. Kod znajduje się pod poniższym linkiem – PoborcaMaciej/Hub: Terraform code that creates hub-and-spoke infrastructure (github.com). W repozytorium znajdują się trzy pliki, które są odpowiedzialne za stworzenie całej infrastruktury Hub and spoke w naszym środowisku. Jednym z plików jest „variables.tf„, który zawiera w sobie deklarację zmiennych wykorzystywanych w głównym kodzie opisującym infrastrukturę. Drugim plikiem jest „terraform.tfvars”, w którym znajdziemy przypisane wartości do wcześniej zadeklarowanych zmiennych. Ostatnim plikiem znajdującym się w repozytorium jest plik main.tf, w którym znajdziemy cały kod odpowiedzialny za stworzenie wszystkich zasobów potrzebnych do funkcjonowania infrastruktury sieciowej w topologii Hub-and-spoke. Przeanalizujmy sobie strukturę tego pliku.
W pierwszym linijkach deklarujemy providera oraz jego wersję, tego providera będziemy wykorzystywać w naszym wdrożeniu. W naszym przypadku jest to Azurerm, czyli provider obsługujący większość zasobów platformy Microsoft Azure. W tym momencie warto wspomnieć, że terraform jest rozwiązaniem cloud agnostic, czyli możemy znaleźć również providerów dla innych chmur publicznych jak AWS czy GCP. Co więcej, istnieją również providerzy dla rozwiązań on-premowych. Kolejną częścią kodu zaczynającą się od linijki 17 jest deklaracja zasobów, które mają zostać stworzone. W przedziale 17-20 linia deklarujemy resource group’ę, która następnie zostanie wykorzystana w całym wdrożeniu. Zauważ proszę, że w tym obszarze odwołuję się do zmiennych za pomocą „var.resourcegroup_name”, do tej zmiennej została przypisana wartość we wcześniej wspomnianym pliku. Kolejną deklaracją zasobu jest obszar od linii 22 do 31, tutaj tworzymy sieć wirtualną, która ponownie swoją nazwę pobiera ze zmiennych, jednakże swoją lokalizację pobiera z właściwości resource group’y zadeklarowanej już wcześniej. Konfigurujemy tutaj również adresację sieci oraz tworzymy subnety. Kolejne linijki kodu są stworzone w podobnym podejściu i o ile masz ochotę możesz przeanalizować resztę kodu. Zauważ, że każda deklaracja zaczyna się czymś podobnym do „resource „azurerm_virtual_network_peering” „Spoke01-Hub” „, w tej linijce możemy znaleźć informację, do jakiego typu zasobu odnosi się poniższy kod. W tym przypadku jest to peering wirtualnych sieci. Przejdźmy teraz do wdrożenia. Przede wszystkim będziesz potrzebować zainstalowanego terraforma oraz az cli. Instrukcję jak zainstalować te narzędzia znajdziesz w poniższych odnośnikach.
Install Terraform | Terraform – HashiCorp Learn
Jak zainstalować | Microsoft Docs
Gdy już mamy zainstalowany terraform oraz az cli, to po pierwsze logujemy się do naszego środowiska Azure. Robimy to za pomocą komendy „az login”
2. Gdy już jesteśmy zalogowani, to kierujemy się do naszego katalogu, w którym znajduje się nasz kod i zaczynamy wdrożenie terraformowe. Pierwszą komendą będzie „terraform init„, która skonfiguruje nam providera oraz backend potrzebny do współpracy z terraformem.
3. Następnym krokiem będzie wykonanie komendy terraform plan, który zwizualizuje nam zmiany, jakie zostaną wprowadzone w naszym środowisku, na bazie naszego pliku konfiguracyjnego.
4. Ostatnią komendą, którą wykonamy będzie terraform apply, który wdroży zmiany opisane w pliku konfiguracyjnym do naszego środowiska.
5. Po okresie oczekiwania (głównie wygenerowanym przez tworzenie VPN gatewaya), nasza infrastruktura została wdrożona.
Podsumowanie
Jak już wiesz z poprzednich wpisów, stworzenie infrastruktury sieciowej w Azure jest bardzo ważnym punktem w adopcji chmury. W dzisiejszym wpisie zajęliśmy się tematem automatyzacji takiego wdrożenia za pomocą Terraform’a. Mam nadzieję, że wiedza zawarta w tym wpisie ci się przyda, a kod posłuży Ci do testów topologii Hub-and-Spoke. Jak wspomniałem nie jest to gotowa infrastruktura, ale jest to bardzo dobry punkt startu w dalszej konfiguracji.