Im Laufe der Jahre hat die Cloud-Entwicklung einen bedeutenden Paradigmenwechsel erlebt. Neuere und komplexere Anwendungen werden schnell in die Cloud bereitgestellt, um die Ausfallzeiten zu minimieren. Und in all dem sind das Konzept der Infrastruktur als Code und verschiedene Tools entstanden, um den Prozess der Anwendungsentwicklung zu vereinfachen.
Sie fragen sich vielleicht: Was ist Infrastruktur als Code? Wie verbessert es den Entwicklungsprozess und die Erfahrung, und wo kommt Terraform ins Spiel? Nun, all dies und mehr werden wir in diesem Leitfaden erkunden. Aber bevor wir beginnen, hier sind einige Voraussetzungen:
-
Grundkenntnisse über die Cloud und Cloud-Terminologie
-
Zugang zu einem PC, um Codebeispiele umzusetzen
-
Ein GCP-Konto
Damit legen wir los.
Hier ist, was wir behandeln werden:
Überblick über Infrastructure as Code (IaC)
Infrastructure as Code bezieht sich auf die Generierung von Cloud-Infrastrukturtools und Anwendungen mit einem codebasierten Konfigurationsdokument. Dieser Prozess automatisiert beim Ausführen die Sequenz und den Prozess der Erstellung von Datenbanken, virtuellen Maschinen und Servern. Dies verbessert die Benutzererfahrung, indem die Häufigkeit manueller Bereitstellungen von Cloud-Services reduziert wird, insbesondere für mehrere identische Dienste.
Es gibt zwei unterschiedliche Ansätze zur Infrastructure as Code: den Imperativen
-Ansatz und den Deklarativen
-Ansatz.
Wenn Sie den deklarativen Ansatz zur Generierung von Infrastrukturen verwenden, geben Sie einfach Ihre erwarteten/gewünschten Ergebnisse für die zu generierende Infrastruktur an, und das IaC-Tool, das Sie verwenden, findet heraus, wie dieses Ergebnis produziert werden kann.
Im Gegensatz dazu beinhaltet der imperative Ansatz die genaue Angabe der Schritte, die erforderlich sind, um den gewünschten Zustand der Infrastruktur zu erreichen. Während der imperative Ansatz besser für komplexe Infrastruktur-Setups geeignet zu sein scheint, kann der deklarative Ansatz ebenso gut funktionieren.
Einige Tools sind in der Lage, beide Ansätze zu unterstützen, während andere nur für den einen oder den anderen geeignet sind. Beispiele für einige der weltweit beliebten IaC-Tools sind Terraform IaC, AWS Cloud Formation, Ansible und Pulumi, Chef und andere.
Wie der Name schon sagt – Infrastruktur als Code – wird der Code, der die Infrastruktur erstellt, in verschiedenen Template-Sprachen im IaC-Bereich geschrieben. Beliebte Template-Sprachen sind JSON, YAML, ARM-Vorlagen, HCL, Heat-Skripte und so weiter.
Sie können auch Skripting-Tools verwenden, um Cloud-Infrastruktur auszuführen. Einige beliebte sind Bash und PowerShell. Diese sind manchmal vorinstalliert auf den meisten Personalcomputern.
Von all diesen Tools ist Terraform jedoch aus verschiedenen Gründen einzigartig – und es ist das Tool, das wir in diesem Artikel untersuchen werden.
Was ist Terraform?
Terraform ist ein Open-Source-Tool, das 2014 von HashiCorp entwickelt wurde. Es hat sich im Laufe der Jahre weiterentwickelt und dient jetzt als cloudunabhängiges Infrastruktur-Tool, das es ermöglicht, Infrastruktur über mehrere Cloud-Service-Anbieter hinweg zu erstellen.
Terraform bietet auch Terraform Cloud, ein cloudbasiertes Software-as-a-Service-Tool. Es ermöglicht die cloudbasierte Bereitstellung von Cloud-Tools, anstatt die alten lokal basierten Methoden zu verwenden, die wir im nicht mehr funktionierenden Terraform-CLI-Tool hatten.
Außerdem, wie andere IaC-Tools, die Template-Sprachen nutzen, ist das Template-Framework zur Erstellung von Infrastruktur in Terraform die HashiCorp-Template-Sprache (HCL).
Vorteile von Terraform
Jetzt werde ich einige der Vorteile der Verwendung von Terraform als Cloud-Engineer hervorheben, zusammen mit der wichtigen Rolle des Tools im Cloud-Ökosystem.
1. Deklarativer Ansatz
Dieser Ansatz zur Automatisierung von Cloud-Infrastruktur stellt sicher, dass alle erforderliche Infrastruktur, die bereitgestellt werden soll (Datenbanken, Server usw.), ausdrücklich angegeben und entsprechend ausgeführt wird. Dies hilft, Konflikte zu vermeiden.
2. Konfliktbehandlung
Neben seinen effizienten Cloud-Tool-Automatisierungsfähigkeiten verfügt Terraform über einige robuste Konflikterkennungs- und -behandlungseigenschaften. Eine Möglichkeit, Konflikte zu behandeln, ist die Verwendung der Funktion Terraform plan
. Diese Funktion hebt wahrgenommene oder potenzielle Konflikte bei der Infrastrukturorchestrierung hervor, was eine einfache Korrektur vor dem Deployment ermöglicht. Ich werde dies in den folgenden Abschnitten weiter erläutern.
3. Cloud-Agnostisch
Terraform ist ein vielseitiger, Multi-Cloud-Automatisierungsdienstleister mit effizienten Infrastrukturautomatisierungsfähigkeiten bei den wichtigsten Cloud-Serviceanbietern (AWS, GCP und Azure). Es ermöglicht auch Hybrid- und Inter-Provider-Automatisierung.
4. Benutzerfreundlich
Terraform ist eines der größten Cloud-Automatisierungstools mit den größten Benutzer-Communities. Es bietet umfangreiche benutzerfreundliche Tutorials, die Ihnen helfen, schnell mit dem Tool vertraut zu werden. Hier ist ein Link zur Dokumentation, damit Sie tiefer eintauchen können.
5. Dateiverwaltungsfähigkeiten
Terraform erstellt automatisch eine lokale Sicherung der Automatisierungsstati auf Ihrem lokalen Computer, um eine sofortige Wiederherstellung und Dateiverwaltung im Falle eines Fehlers zu gewährleisten. Es bietet auch Remote-Backup-Optionen zu entfernten Cloud-Serviceanbietern, wenn erforderlich.
6. Versionskontrolle
Genau wie das Git-Versionierungssystem hat Terraform ein integriertes Versionskontrollsystem, mit dem Sie Änderungen an einer Terraform-Datei nachverfolgen können. Es ermöglicht Ihnen auch, zu früheren Versionen Ihres Codes zurückzukehren, wenn in der aktuellen Version Fehler auftreten, beispielsweise.
7. Wiederverwendbarkeit von Code
Terraform bietet eine Vielzahl von Codevorlagen für eine einfache Wiederverwendung auf seiner Entwicklerdokumentationsseite.
Jetzt, da wir die Vorteile von Terraform hervorgehoben haben, lassen Sie uns einige gängige Begriffe, die in Terraform verwendet werden, kennenlernen und was sie bedeuten.
Gängige Begriffe, die in Terraform verwendet werden
Bevor Sie mit Terraform arbeiten, sollten Sie mit einigen Schlüsselbegriffen vertraut sein, die häufig vorkommen. Hier ist, was Sie wissen müssen:
-
Provider: In Terraform ist ein Provider eine Programmierschnittstelle, die es Terraform ermöglicht, mit verschiedenen APIs und Cloud-Diensten zu interagieren. Zum Beispiel würden Sie einen Provider verwenden, um mit einem Cloud-Service-Provider wie GCP oder Azure zu interagieren.
-
Module: Module sind speziell innerhalb des Terraform-Frameworks erstellt und dienen als wiederverwendbare Komponenten, mit denen Sie Cloud-Dienste einfach orchestrieren können. Sie können auch wichtige Informationen zu Cloud-Diensten in einem Modul speichern und diese dann ändern, um Einzigartigkeit mithilfe von Modulvariablen sicherzustellen.
-
Ressourcen: Ressourcen in Terraform beziehen sich auf die zu erstellenden Cloud-Infrastrukturkomponenten. Beispiele sind Cloud-Netzwerke, virtuelle Maschinen, Verfügbarkeitszonen und andere Infrastrukturen.
-
Status: Der Begriff „Status“ in Terraform bildet die Grundlage für seine Effizienz. Der Status verfolgt die aktuelle Konfiguration Ihrer Infrastrukturressourcen und enthält Details zu jeder Ressource, die Terraform erstellt, geändert oder gelöscht hat. Das Versionskontrollsystem von Terraform verwendet es, um alle Änderungen, die Sie an einer Code-Datei vornehmen, zu verfolgen, und verwendet diese Informationen, um die Infrastruktur bei Bedarf zu zerstören und bereitzustellen.
-
Arbeitsbereich: Ein Arbeitsbereich funktioniert ähnlich wie ein Versionskontrollsystem, da er eine Art Einschränkung um eine Arbeitsdatei erstellt. Arbeitsbereiche ermöglichen es Ihnen, mehrere Instanzen einer einzigen Infrastrukturkonfiguration auf saubere und isolierte Weise im selben Backend zu verwalten. Sie können Arbeitsbereiche verwenden, um Umgebungen wie Entwicklung, Staging und Produktion zu trennen, während Sie dieselbe Terraform-Konfiguration verwenden.
Demoprojekt: Wie man eine Terraform-Konfiguration schreibt
In diesem Abschnitt werden wir tiefer in das Schreiben unserer ersten Terraform-Datei eintauchen, um eine virtuelle Maschine eines Google Cloud-Programms mit nur wenigen Codezeilen zu orchestrieren. Bevor wir jedoch beginnen, werden wir die verschiedenen Befehle besprechen, die Sie verstehen sollten, bevor wir das Demoprojekt implementieren.
Übliche Terraform-Befehle
-
Terraform init
: Dieser Befehl initialisiert das Terraform-Tool und lädt wichtige cloudanbieterspezifische Dateien herunter. Er stellt auch eine Verbindung zwischen Terraform und dem betreffenden Cloud-Anbieter her. In unserem Fall handelt es sich um die Verbindung zwischen GCP und dem Terraform-Anbieter. -
Terraform fmt
: Dieser Befehl sorgt automatisch für eine optimale Codeformatierung und Einrückung. Er gewährleistet eine ordnungsgemäße Ausführung des Codes und minimiert etwaige Fehler. -
Terraform plan
: Dieser Befehl skizziert die Ausführungsschritte des Terraform-Codes und erkennt etwaige Fehler, die während des Ausführungsprozesses auftreten können. Er hebt auch Fehler im Terraform-Code hervor, die die Ausführung behindern könnten. Schließlich arbeitet er zusammen mit dem Terraform-Statusmanagement, um Änderungen des Status zu erkennen und gegebenenfalls zusätzliche Cloud-Dienste abzubauen oder zu generieren. -
Terraform apply
: Dieser Befehl führt den geplanten Terraform-Zustand aus, der durch denTerraform plan
Befehl implementiert wurde. -
Terraform destroy
: Dieser Befehl ist der letzte Befehl im Terraform-Schema, der verwendet wird, um alle Cloud-Dienste, die mit dem Terraform apply-Befehl erstellt wurden, zu deaktivieren oder zu zerstören. Es ist wichtig zu beachten, dass Sie die oben aufgeführten Befehle der Reihe nach ausführen sollten, um sicherzustellen, dass Ihre Infrastruktur ordnungsgemäß erstellt wird.
Erstellen einer IaC-gesteuerten GCP-VM
Jetzt, da Sie diese wichtigen Befehle gelernt haben, lassen Sie uns alle testen, indem wir unsere erste IaC-gesteuerte GCP-VM erstellen.
Geben Sie in Ihrem Code-Editor den folgenden Code ein:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
Dieser Code hebt den Cloud-Anbieter hervor, den wir verwenden, um die benötigten Cloud-Ressourcen zu generieren. In unserem Fall ist es das Google Cloud-Programm. Der ihm zugewiesene Name ist einfach „google“. Andere Cloud-Anbieter wie AWS und Azure sind „aws“ bzw. „azure“.
Die zweite Zeile identifiziert den GCP-Abonnement-Identifikator, der einzigartig für jedes GCP-Konto ist (und hilft, eine genaue Integration zu erleichtern). Sie sollten Ihren im bereitgestellten Feld verwenden.
Sie müssen auch eine geeignete Ressourcenregion und Verfügbarkeitszone angeben. Dies dient als physische Basis für die virtuelle Maschine, die wir erstellen werden, damit wir sie betreiben können. In diesem Szenario habe ich die zentrale Region der USA und die Verfügbarkeitszone 1-a gewählt. Sie können mehr hier über Cloud-Regionen und Verfügbarkeitszonen lesen.
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
Der obige Code-Schnipsel gibt die genaue Compute-Ressource an, die orchestriert werden soll, was in unserem Fall eine virtuelle Maschineninstanz ist, die als „vm_instance“ codiert ist. 'example-vm’
ist der Name, den wir der virtuellen Maschine zuweisen möchten, die wir für dieses Projekt erstellen werden. Es ist wichtig zu beachten, dass der Name der virtuellen Maschine ebenfalls einzigartig sein muss. Die Art der virtuellen Maschine, für die wir uns entschieden haben, war der E2 (Allzweck)-Mediumtyp-VM. Weitere Informationen zu virtuellen Maschinentypen finden Sie hier.
Darüber hinaus geben wir auch das erwartete gebootete Betriebssystem („boot_disk“) an, das in meinem Fall ein Image des Debian Linux-Betriebssystems der Version 11 ist.
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Um die Erstellung unserer virtuellen Maschine abzuschließen, müssen wir ein virtuelles Netzwerk einrichten, um den Remotezugriff auf die VM zu ermöglichen. Der Netzwerk-Schnittstellenblock verbindet die virtuelle Maschine mit dem standardmäßigen VPC (Virtual Private Cloud)-Netzwerk, das von GCP bereitgestellt wird. Ohne das VPC-Netzwerk können wir keine Verbindung mit unserer virtuellen Maschine herstellen. Der Ausgabeblock zeigt auch die standardmäßige Zugriffs-IP-Adresse im Terminal an, die wir verwenden können, um uns mit der virtuellen Maschine zu verbinden.
Hier ist der erwartete endgültige Code:
provider "google" {
project = "your-gcp-project-id" # Replace with your GCP Project ID
region = "us-central1"
zone = "us-central1-a"
}
resource "google_compute_instance" "vm_instance" {
name = "example-vm"
machine_type = "e2-medium"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "default" # Attach to the default VPC network
access_config {
}
}
output "instance_ip" {
value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}
Von dort aus werden wir nun diesen Code mit den unten im Bild markierten Befehlen ausführen:
Der Befehl terraform -v
bestätigt, dass Terraform erfolgreich auf dem Terminal installiert wurde. Die erwartete Ausgabe wird die Version des installierten Terraform-Tools sein.
Der nächste ausgeführte Befehl ist die terraform init
-Funktion, die eine Kommunikation mit dem Cloud-Dienstanbieter initialisiert, der in unserem Fall GCP ist. Alle benötigten Abhängigkeiten werden ebenfalls installiert.
Der Befehl terraform fmt
wird ebenfalls ausgeführt, um eine angemessene Codeformatierung und Einrückung sicherzustellen. Anschließend wird der Befehl terraform plan
sequenziell ausgeführt.
Von dem oben gezeigten Bild können Sie die Schritte sehen, die Terraform verwenden möchte, um die erwartete virtuelle Maschine zu generieren.
Bei erfolgreicher Ausführung von Terraform plan werden wir dann die Funktion terraform apply
ausführen, um die von Terraform plan skizzierten Schritte auszuführen.
Dadurch wird eine Aufforderung generiert, die um Bestätigung der Terraform-Ausführung bittet, wie oben gezeigt. Wenn Sie „Ja“ eingeben, wird der Vorgang reibungslos fortgesetzt.
Bei erfolgreicher Ausführung wird eine Erfolgsmeldung angezeigt, wie oben gezeigt. Damit haben wir unsere Cloud-Infrastruktur nur mit Code erstellt. Der Befehl terraform destroy
kann dann aufgerufen werden, um die erstellten virtuellen Maschinen zu entfernen.
Fazit
In diesem Artikel haben Sie die Grundlagen der Infrastruktur als Code kennengelernt. Wir haben über Terraform, seine Vorteile und einige seiner Hauptmerkmale und Befehle gesprochen. Wir haben auch seine Verwendung in einem Demoprojekt veranschaulicht.
Um Ihr Wissen weiter zu vertiefen, können Sie die Dokumentation von Terraform konsultieren für weitere Codebeispiele. Ich empfehle auch, Ihr neu erlangtes Wissen zu nutzen, um ein Projekt mit realen Anwendungen zu automatisieren.
Zögern Sie nicht, mir Ihre Kommentare oder Fragen zu senden. Sie können auch meine anderen Artikel hier ansehen. Bis zum nächsten Mal, bleiben Sie am Programmieren!
Source:
https://www.freecodecamp.org/news/a-beginners-guide-to-terraform-infrastructure-as-code-in-practice/