Wyrażenie „Infrastruktura jako kod” zostało wspomniane kilka razy w ciągu ostatnich dwóch tygodni w różnych kontekstach. Co to właściwie oznacza w praktyce, że infrastruktura jest kodem?
źródło
Wyrażenie „Infrastruktura jako kod” zostało wspomniane kilka razy w ciągu ostatnich dwóch tygodni w różnych kontekstach. Co to właściwie oznacza w praktyce, że infrastruktura jest kodem?
TL; DR : Infrastruktura jako kod to sposób na automatyzację i tworzenie kopii zapasowych środowiska. W idealnym przypadku po awarii można całkowicie i automatycznie przywrócić infrastrukturę, udostępniając nowe zasoby, przywracając konfigurację z repozytorium kodów i odzyskując dane z kopii zapasowej.
Infrastruktura jako kod opiera się na trzech głównych koncepcjach:
Automatyzacja zarządzania konfiguracją , zwana ciągłą automatyzacją konfiguracji - dziedzina, w której pionierem jest prof. Mark Burgess
Repozytorium kodu dla zmian w infrastrukturze, gdzie zmiany są najpierw zatwierdzane, dokumentowane, przeglądane, testowane, a następnie wdrażane za pomocą automatyzacji.
Zarządzanie infrastrukturą zarządzaną . Infrastruktura jako usługa (IaaS). Zarówno w chmurze obliczeniowej , prywatnej lub zarządzanej chmurze lub zarządzanych usługach centrum danych
Zarządzanie konfiguracją to trzecia generacja narzędzi. Opierając się na CFEngine, nowy zestaw narzędzi do zautomatyzowanego zarządzania konfiguracją jest obecnie szeroko wdrażany. Najpopularniejsze w kolejności alfabetycznej to Ansible, CFEngine, Chef, Puppet, PowerShell DSC i SaltStack . Każdy będzie miał język opisujący stan twojej infrastruktury, moduły kodu do stosowania tych zmian i zapewniające możliwość rozszerzenia narzędzi, niektórych agentów do wykonywania tych na serwerach oraz centralne repozytorium informacji.
Zasadniczo będą działać w trybie push lub pull, łącząc się z serwerami z centralnej lokalizacji i wykonując zmiany zdalnie lub uruchamiając na każdym serwerze i wyciągając informacje o stanie z centralnej lokalizacji oraz w modelu klient / serwer lub w rozproszonym droga.
Ważnym pojęciem jest dla administratora systemu lub inżyniera niezawodności witryny do nie wprowadzania zmian bezpośrednio z infrastrukturą, ale pozwól automatyzacja zrobić zmiany. Wszystko, co zostało wykonane ręcznie przez człowieka, należy uznać za łatwo psujące się, które wkrótce zostanie naprawione automatycznie lub w bardziej rygorystycznej formie, naruszając integralność infrastruktury i powodując zniszczenie i odbudowę uszkodzonych komponentów.
Repozytorium kodu, idealnie oddzielone od oprogramowania przechowującego repozytorium, byłoby wykorzystywane do zarządzania wszystkimi zmianami w infrastrukturze i związanej z nią automatyzacji. Powinien zawierać pliki konfiguracyjne i szablony, Podręczniki (książki kucharskie) opisujące proces zmian do przeglądu, Kod rozszerzający narzędzia automatyzacji CM, Konfiguracje udostępniania, Testy i alerty infrastruktury, Testy przemieszczania / wdrażania, Dokumentacja, Podręcznik (jeszcze nie zautomatyzowany) Opisy procesów .
Ważną koncepcją jest przeprowadzanie wzajemnych ocen zmian, rejestrowanie wszystkich zmian i możliwość automatycznego powrotu do poprzedniego stanu w przypadku nieprzewidzianych i / lub niesprawdzonych problemów, możliwość wdrożenia w środowisku testowym i testowanie zmian konfiguracji oraz możliwość automatycznego wdrożenia zmiany bez zmian spowodowane błędem ludzkim.
Zarządzanie infrastrukturą fizyczną to zadanie w świecie rzeczywistym, które wykracza poza oprogramowanie i wymaga bardzo różnych umiejętności. Dzięki możliwości wyodrębnienia tej warstwy za pomocą Cloud Computing lub Managed Datacenter, zespół skupia się na zarządzaniu infrastrukturą, która dodaje wartości biznesowej.
Podczas gdy Cloud Computing oferuje sposób na szybkie rozpoczęcie i skalowanie na późniejszym etapie, firmy często osiągają pewne korzyści, a nawet znaczne oszczędności w przenoszeniu części infrastruktury we własnych centrach danych dla modelu hybrydowego. Posiadanie lub wynajem sprzętu nie oznacza, że musisz również zatrudnić osoby, które się nim zajmują. W tej skali potrzebujesz centrów danych rozmieszczonych geograficznie na całym świecie, a posiadanie osób posiadających wszystkie wymagane umiejętności we wszystkich miejscach byłoby bardzo kosztowne. Latanie nimi dookoła świata powoduje duże opóźnienia we wszelkich zmianach i dodatkowy poziom nieefektywności operacyjnej, co jest kolejnym powodem outsourcingu zarządzania centrum danych.
Ważne jest to, że zarządzana infrastruktura fizyczna jest często zapomniana lub pomijana , ale równie ważna. Nawet jeśli masz wszystko zautomatyzowane, cała konfiguracja jest przechowywana w repozytorium kodu z kopią zapasową, chyba że masz sposób na szybkie udostępnienie , masz ogromne wąskie gardło , które może łatwo usunąć wszystkie korzyści , które zyskałeś dzięki pozostałym dwóm krokom .
Zanim wyjaśnię, co to właściwie jest, pozwól mi zacytować naprawdę fajną definicję, prosto z Wikipedii :
Infrastruktura jako kod (IaC) to proces zarządzania infrastrukturą obliczeniową (procesy, serwery typu bare-metal, serwery wirtualne itp.) I ich konfiguracja za pomocą plików definicji przetwarzanych maszynowo, a nie fizycznej konfiguracji sprzętu lub konfiguracji interaktywnej przybory.
Dobra, spójrzmy teraz na jedno takie narzędzie IaC, Terraform, aby lepiej zrozumieć tę koncepcję: https://www.terraform.io/
To samo mówi o sobie Terraform:
Terraform umożliwia bezpieczne i przewidywalne tworzenie, zmienianie i ulepszanie infrastruktury produkcyjnej. Jest to narzędzie typu open source, które kodyfikuje interfejsy API w deklaratywne pliki konfiguracyjne, które mogą być współużytkowane przez członków zespołu, traktowane jako kod, edytowane, przeglądane i wersjonowane.
Oznacza to, że można zakodować całą infra. który obejmuje tworzenie zasobów w chmurze (/ infra), takich jak instancje serwera, moduły równoważenia obciążenia itp., wraz z kompletnymi konfiguracjami (które obejmują poprawki podstawowych ustawień, ustawienia zabezpieczeń, regiony itp.) jako kod, który można edytować, aktualizować i oczywiście możliwe do przejrzenia.
Oto przykładowy kod Terraform do udostępniania zasobów AWS:
resource "aws_elb" "frontend" {
name = "frontend-load-balancer"
listener {
instance_port = 8000
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
instances = ["${aws_instance.app.*.id}"]
}
resource "aws_instance" "app" {
count = 5
ami = "ami-408c7f28"
instance_type = "t1.micro"
}
Bonus PS : Należy także zrozumieć różnice między narzędziami do udostępniania i aranżacji . Twórcy bardzo często mylą się nawzajem i często popełniają błąd, próbując ulepszyć i użyć narzędzia do tego, do czego nie są przeznaczone.