Wie man

Bereitstellen von VM-Instanzen in der Hetzner Cloud mit Terraform

Bereitstellen von VM-Instanzen in der Hetzner Cloud mit Terraform

In diesem Blogbeitrag sehen wir uns an, wie Sie mit Terraform VMs in der Hetzner Cloud bereitstellen. Hetzner ist ein in Deutschland ansässiger Hosting-Provider, der flexible Cloud-Server mit High-End-Hardware bereitstellt und dedizierte physische Server versteigert. Ihre Preise sind pro/Monat sehr wettbewerbsfähig.

Ich verwende Hetzner für die meisten meiner Hosting-Dienste und für den Aufbau von Testlabors. Die Zusammenarbeit mit Terraform sorgt für Effizienz und eine schnellere Bereitstellung von Services für die Produktion. Terraform ist ein Open-Source-Infrastruktur als Code-Software-Tool, das von HashiCorp . entwickelt wurde.

Mit Terraform können Sie Infrastrukturen sicher und vorhersehbar erstellen, ändern und verbessern. Ihr gesamter Infrastrukturcode kann in einem Git-Repository gespeichert und versioniert werden.

Laboreinrichtung

In diesem Artikel zeige ich dir, wie du erstellst drei Instanzen auf der Hetzner Cloud mit Terraform. Wir werden den Instanzen, die für den Fernzugriff verwendet werden, einen ssh-Schlüssel hinzufügen. Die drei erstellten VMs stammen von CentOS 7, Ubuntu 18.04- und Debian 9-Vorlagen. Wir sorgen dafür, dass terraform die öffentlichen IP-Adressen für die erstellten virtuellen Maschinen ausgibt.

Schritt 1: Terraform installieren

Verwenden Sie unsere Anleitung unten, um Terraform in Ihrem Linux / Windows-System zu installieren.

Installieren Sie Terraform unter Windows 10 / Windows Server 2019

So installieren Sie Terraform unter Linux

Schritt 2: Terraform-Projekt erstellen

Erstellen wir einen Ordner für Terraform-Projekte.

$ mkdir -p ~/automation/terraform/hetzner $ cd ~/automation/terraform/hetzner

Erstellen Sie nun die Terraform-Hauptkonfigurationsdatei.

berühren.tf 

Schritt 3: Hetzner API Token generieren

API-Token von der Hetzner-Konsole abrufen, die von Terraform verwendet wird, um mit der Plattform zu interagieren. Navigieren Sie zu https://console.hetzner.Cloud/Projekte und klicken Sie auf Zugriff > API-TOKENS > API ERSTELLEN

Geben Sie dem Token einen beschreibenden Namen und klicken Sie auf die Schaltfläche Generieren. Beachten Sie das generierte API-Token, da dieses im nächsten Abschnitt verwendet wird.

Schritt 4: SSH-Schlüssel zu Hetzner hinzufügen.

Wenn Sie keinen ssh-Schlüssel haben, generieren Sie ihn.

$ ssh-keygen -q -N ""  Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/home/myuser/.ssh/id_rsa):

Kopieren Sie den Inhalt in ~/.ssh/id_rsa.Kneipe

$ xclip -sel-clip ~/.ssh/id_rsa.Kneipe

Melden Sie sich bei der Hetzner-Konsole an und fügen Sie Ihre ssh-Schlüssel hinzu Zugriff > SSH-SCHLÜSSEL > SSH-SCHLÜSSEL HINZUFÜGEN

Kopieren Sie den Fingerabdruck, der nach dem Hinzufügen des Schlüssels generiert wurde, etwa de:c7:80:23:5b:3e:28:52:1a:5d:0f:84:1b:fe:38:ec.

Schritt 5: Terraform-Konfigurationsdatei erstellen und ausfüllen

Bearbeiten Sie die Terraform-Konfigurationsdatei und fügen Sie Daten hinzu, die zum Erstellen von Ressourcen verwendet werden.

############## Variablen ############### # Token-Variable Variable "hcloud_token"  default = "PASTE_API_TOKEN_HERE"  # Hetzner-Provider-Provider definieren " hcloud"  token = "$var.hcloud_token"  # SSH-Schlüsseldatendaten abrufen "hcloud_ssh_key" "ssh_key"  fingerabdruck = "PASTE_ADDED_SSH_KEY_FINGERPRINT_HERE"  # Erstellen Sie ein Ubuntu 18.04 Serverressource "hcloud_server" "ubuntu18"  name = "ubuntu18" image = "ubuntu-18.04" server_type = "cx11" ssh_keys = ["$data.hcloud_ssh_key.ssh_key.id"]  # Debian 9-Serverressource erstellen "hcloud_server" "debian9"  name = "debian9" image = "debian-9" server_type = "cx21" ssh_keys = ["$data.hcloud_ssh_key.ssh_key.id"]  # CentOS 7-Serverressource erstellen "hcloud_server" "centos7"  name = "centos7" image = "centos-7" server_type = "cx31" ssh_keys = ["$data.hcloud_ssh_key.ssh_key.id"]  # Ausgabe der Server-IPs Ausgabe "server_ip_ubuntu18"  value = "$hcloud_server.ubuntu18.ipv4_address"  Ausgabe "server_ip_centos7"  Wert = "$hcloud_server.Centos7.ipv4_address"  Ausgabe "server_ip_debian9"  Wert = "$hcloud_server.debian9.ipv4_address"  

Initialisieren Sie ein Terraform-Arbeitsverzeichnis:

$ terraform init Backend initialisieren… Provider-Plugins initialisieren… - Nach verfügbaren Provider-Plugins suchen… - Plugin für Anbieter "hcloud" herunterladen (terraform-providers/hcloud) 1.10.0… Die folgenden Anbieter haben keine Versionseinschränkungen in der Konfiguration, daher wurde die neueste Version installiert. Um automatische Upgrades auf neue Hauptversionen zu verhindern, die Breaking Changes enthalten können, wird empfohlen, den entsprechenden Provider-Blöcken in der Konfiguration version = "… "-Einschränkungen mit den unten vorgeschlagenen Einschränkungszeichenfolgen hinzuzufügen. * Anbieter.hcloud: version = "~> 1.10" Terraform wurde erfolgreich initialisiert! Sie können jetzt mit der Arbeit mit Terraform beginnen. Versuchen Sie, "terraform plan" auszuführen, um alle Änderungen anzuzeigen, die für Ihre Infrastruktur erforderlich sind. Alle Terraform-Befehle sollten jetzt funktionieren. Wenn Sie jemals Module oder die Backend-Konfiguration für Terraform festlegen oder ändern, führen Sie diesen Befehl erneut aus, um Ihr Arbeitsverzeichnis neu zu initialisieren. Wenn Sie es vergessen, werden andere Befehle es erkennen und Sie gegebenenfalls daran erinnern.

Terraform lädt den Anbieter automatisch herunter auf .Terraform Verzeichnis.

$ Baum .Terraform/ .terraform/ Plugins └── linux_amd64 ├── sperren.json terraform-provider-hcloud_v1.10.0_x4 2 Verzeichnisse, 2 Dateien


Um Ihre Infrastruktur mit Terraform aufzubauen, führen Sie terraform anwenden.

$ terraform bewerben

Beispielausgabe.

Daten.hcloud_ssh_key.ssh_key: Status wird aktualisiert… Ein Ausführungsplan wurde generiert und wird unten angezeigt. Ressourcenaktionen sind mit den folgenden Symbolen gekennzeichnet: + Create Terraform führt die folgenden Aktionen aus: # hcloud_server.centos7 wird erstellt + Ressource "hcloud_server" "centos7"  + backup_window = (nach dem Anwenden bekannt) + backups = false + datacenter = (nach dem Anwenden bekannt) + id = (nach dem Anwenden bekannt) + image = "centos-7" + ipv4_address = (nach Anwenden bekannt) + ipv6_address = (nach Anwenden bekannt) + ipv6_network = (nach Anwenden bekannt) + keep_disk = false + location = (nach Anwenden bekannt) + name = "centos7" + server_type = "cx31" + ssh_keys = [ + "421205", ] + status = (nach dem Bewerben bekannt)  # hcloud_server.debian9 wird erstellt + Ressource "hcloud_server" "debian9"  + backup_window = (nach dem Anwenden bekannt) + backups = false + datacenter = (nach dem Anwenden bekannt) + id = (nach dem Anwenden bekannt) + image = "debian-9" + ipv4_address = (nach Anwenden bekannt) + ipv6_address = (nach Anwenden bekannt) + ipv6_network = (nach Anwenden bekannt) + keep_disk = false + location = (nach Anwenden bekannt) + name = "debian9" + server_type = "cx21" + ssh_keys = [ + "421205", ] + status = (nach dem Bewerben bekannt)  # hcloud_server.ubuntu18 wird erstellt + Ressource "hcloud_server" "ubuntu18"  + backup_window = (nach dem Anwenden bekannt) + backups = false + datacenter = (nach dem Anwenden bekannt) + id = (nach dem Anwenden bekannt) + image = "ubuntu-18.04" + ipv4_address = (nach dem Anwenden bekannt) + ipv6_address = (nach dem Anwenden bekannt) + ipv6_network = (nach dem Anwenden bekannt) + keep_disk = false + location = (nach dem Anwenden bekannt) + name = "ubuntu16" + server_type = "cx11" + ssh_keys = [ + "421205", ] + status = (nach dem Anwenden bekannt)  Plan: 3 hinzufügen, 0 ändern, 0 zerstören. Möchten Sie diese Aktionen ausführen?? Terraform führt die oben beschriebenen Aktionen aus. Nur "Ja" wird zur Genehmigung akzeptiert. Geben Sie einen Wert ein: ja hcloud_server.ubuntu18: Erstellt… hcloud_server.centos7: Erstellt… hcloud_server.debian9: Erstellt… hcloud_server.centos7: Erstellung nach 8s abgeschlossen [id=2869955] hcloud_server.debian9: Erstellung nach 8s abgeschlossen [id=2869956] hcloud_server.ubuntu18: Erstellung nach 8s abgeschlossen [id=2869954] Übernehmen abgeschlossen! Ressourcen: 3 hinzugefügt, 0 geändert, 0 zerstört. Ausgaben: server_ip_centos7 = 116.203.44.172 server_ip_debian9 = 116.203.87.93 server_ip_ubuntu18 = 116.203.48.203


Testen Sie den Zugriff auf Ihre Instanzen mit gedruckten IP-Adressen.

$ ssh [email protected] Warnung: Permanent hinzugefügt '116.203.44.172' (ECDSA) zur Liste der bekannten Hosts. [[email protected] ~]# $ ssh [email protected] Warnung: Permanent hinzugefügt '116.203.87.93' (ECDSA) zur Liste der bekannten Wirte. Linux debian9 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 Die im Debian GNU/Linux-System enthaltenen Programme sind freie Software; die genauen Vertriebsbedingungen für jedes Programm sind in den einzelnen Dateien in /usr/share/doc/*/copyright . beschrieben. Debian GNU/Linux bietet ABSOLUT KEINE GEWÄHRLEISTUNG, soweit dies nach geltendem Recht zulässig ist. [email protected]:~# $ ssh [email protected] Warnung: Permanent hinzugefügt '116.203.48.203' (ECDSA) zur Liste der bekannten Hosts. Willkommen bei Ubuntu 18.04.2 LTS (GNU/Linux 4.fünfzehn.0-50-generic x86_64) * Dokumentation: https://help.ubuntu.com * Verwaltung: https://landscape.kanonisch.com * Unterstützung: https://ubuntu.com/advantage Systeminformationen Stand So. 30.06.2019 21:25:40 MESZ 2019 Systemauslastung: 0.65 Prozesse: 87 Verwendung von /: 8.4% von 18.72GB Angemeldete Benutzer: 0 Speichernutzung: 6% IP-Adresse für eth0: 116.203.48.203 Swap-Nutzung: 0% 73 Pakete können aktualisiert werden. 40 Updates sind Sicherheitsupdates. [E-Mail geschützt]:~# 

Zerstörung der Terraform-Infrastruktur

Führen Sie den Befehl aus, um die von Terraform verwaltete Infrastruktur zu zerstören.

Terraform zerstört Daten.hcloud_ssh_key.ssh_key: Status wird aktualisiert… hcloud_server.centos7: Status wird aktualisiert… [id=2869955] hcloud_server.ubuntu18: Status wird aktualisiert… [id=2869954] hcloud_server.debian9: Status wird aktualisiert… [id=2869956] Ein Ausführungsplan wurde generiert und wird unten angezeigt. Ressourcenaktionen sind mit den folgenden Symbolen gekennzeichnet: - Terraform zerstören führt die folgenden Aktionen aus: # hcloud_server.centos7 wird zerstört - Ressource "hcloud_server" "centos7"  - backups = false -> null - datacenter = "nbg1-dc3" -> null - id = "2869955" -> null - image = "centos-7" -> null - ipv4_address = "116.203.44.172" -> null - ipv6_address = "2a01:4f8:c2c:83a2::" -> null - ipv6_network = "2a01:4f8:c2c:83a2::/64" -> null - keep_disk = false -> null - Standort = "nbg1" -> null - name = "centos7" -> null - server_type = "cx31" -> null - ssh_keys = [ - "421205", ] -> null - status = "running" -> null  # hcloud_server.debian9 wird zerstört - Ressource "hcloud_server" "debian9"  - backups = false -> null - datacenter = "nbg1-dc3" -> null - id = "2869956" -> null - image = "debian-9" -> null - ipv4_address = "116.203.87.93" -> null - ipv6_address = "2a01:4f8:c2c:44a6::" -> null - ipv6_network = "2a01:4f8:c2c:44a6::/64" -> null - keep_disk = false -> null - location = "nbg1" -> null - name = "debian9" -> null - server_type = "cx21" -> null - ssh_keys = [ - "421205", ] -> null - status = "running" -> null  # hcloud_server.ubuntu18 wird zerstört - Ressource "hcloud_server" "ubuntu18"  - backups = false -> null - datacenter = "nbg1-dc3" -> null - id = "2869954" -> null - image = "ubuntu-18.04" -> null - ipv4_address = "116.203.48.203" -> null - ipv6_address = "2a01:4f8:c2c:1006::" -> null - ipv6_network = "2a01:4f8:c2c:1006::/64" -> null - keep_disk = false -> null - Standort = "nbg1" -> null - name = "ubuntu16" -> null - server_type = "cx11" -> null - ssh_keys = [ - "421205", ] -> null - status = "running" -> null  Plan: 0 hinzufügen, 0 ändern, 3 zerstören. Willst du wirklich alle Ressourcen zerstören? Terraform zerstört Ihre gesamte verwaltete Infrastruktur, wie oben gezeigt. Es gibt kein Rückgängig machen. Zur Bestätigung wird nur "Ja" akzeptiert. Geben Sie einen Wert ein: ja hcloud_server.debian9: Zerstört… [id=2869956] hcloud_server.centos7: Zerstört… [id=2869955] hcloud_server.ubuntu18: Zerstört… [id=2869954] hcloud_server.centos7: Zerstörung nach 0s abgeschlossen hcloud_server.ubuntu18: Zerstörung nach 0s abgeschlossen hcloud_server.debian9: Zerstörung nach 0s abgeschlossen

Wenn Sie zum Akzeptieren aufgefordert werden, geben Sie „Ja“.

Wenn Sie keine Bestätigungsaufforderung wünschen, verwenden Sie:

Terraform zerstören -automatisch genehmigen

Überprüfen Sie andere Terraform-Ressourcen und unterstützte Datentypen für die Hetzner-Cloud.

Terraform-Videokurse in udemy:Learn DevOps: Infrastructure Automation with TerraformLernen Sie DevOps: Infrastrukturautomatisierung mit Terraform$15.68$48.22auf LagerJETZT KAUFENUdemy.com

Ähnliche Artikel:

So stellen Sie VMs auf KVM mit Terraform bereit

Erstellen Sie AWS EC2-Maschinen-Images (AMI) mit Packer und Ansible

Werden Sie noch heute ein Linux-Geek, indem Sie unsere empfohlenen Linux-Bücher kaufen:

Beste Linux-Bücher für Anfänger und Experten

Die besten LPIC-1- und LPIC-2-Zertifizierungsstudienbücher

So ziehen Sie Container-Images manuell, die von Kubernetes kubeadm verwendet werden
Beim Einrichten des Kubernetes-Clusters mit kubeadmin, ein drin Befehlsoption wird verwendet, um die Kubernetes-Steuerungsebene einzurichten. Kubernet...
So exportieren und importieren Sie Docker-Images / Container
In diesem Leitfaden sehen wir uns an, wie Sie Docker-Images und -Container exportieren und importieren können. Bevor Sie einen Docker-Container export...
Kubernetes-Cluster auf CentOS 7 / CentOS 8 mit Ansible und Calico CNI bereitstellen
Sie möchten einen Kubernetes-Cluster mit drei Knoten auf CentOS 7 / CentOS 8 für Ihre Entwicklungsprojekte einrichten - 1 Meister und Zwei oder mehr W...