Einleitung
In diesem Tutorial werde ich dich begleiten und dir zeigen, wie du Terraform auf Ubuntu installieren kannst und mit Hilfe von Terraform ganz einfach sowohl neue Server, als auch Storages im gridscale Panel erstellen kannst.
Mit Terraform kannst du deine Infrastruktur als Code darstellen. Dies ermöglicht Prozesse zu automatisieren und zu beschleunigen, wodurch weniger Fehler entstehen können als bei einer manuellen Einrichtung. Die Infrastruktur des Servers ist darüber leichter zu skalieren und mehrfach verwendbar. Weiterhin ist es möglich, den Zustand der Infrastruktur zu sichern und auch die Konfigurationsdateien als Dokumentation anzubieten. Ein weiterer Vorteil besteht darin, dass Terraform plattformunabhängig einsetzbar ist. Zudem gibt die Anwendung vor jeder Ausführung an, welche Änderungen sie vornehmen wird. Dies ermöglicht dem Nutzer die Ausführung falscher Konfigurationen zu unterbinden.
Vorbereitung
Falls du noch nicht weißt, wie du einen Server bei uns einrichten kannst, empfehle ich dir vorher unser Tutorial “How to gridscale”
anzuschauen. Solltest du noch keinen Account besitzen, kannst du dich hier
registrieren.
Als erstes solltest du über das Terminal deines Rechners eine SSH-Verbindung zu deinem Server aufbauen. Tippe hierzu
# ssh root@ip-adresse
und ersetze “ip-adresse ”mit der IP-Adresse, die dir im gridscale Panel für deinen Server angezeigt wird.
Aktuell bist du als root eingeloggt, was du im Terminal daran erkennst, dass die Kommandozeile mit “#” eingeleitet wird. Da es Best Practice ist, mit einem Benutzer ohne root-Rechte zu arbeiten und dies nur bei Bedarf zu tun, solltest du dir einen neuen User anlegen. Einen neuen Benutzer kann man mit folgendem Befehl hinzufügen.
# adduser username
Hierbei gibst du anstelle von username den Namen ein, den der neue User besitzen soll. Daraufhin wirst du darum gebeten, für diesen Benutzer ein Passwort anzulegen, sowie einige Informationen zu hinterlegen, die sich auf den Benutzer beziehen. Die User-Informationen kannst du ruhig leer lassen und mit Betätigung der Enter-Taste überspringen.
Wenn dies erledigt ist, solltest du den neu erstellten Benutzer der sudo Gruppe hinzufügen. Das geschieht mit dem unten gezeigten Befehl.
# usermod -aG sudo username
Nun kannst du mit dem Befehl
# su - username
zu diesem Benutzer wechseln und agierst als dieser. Du wirst auch feststellen, dass sich das “#”in der Kommandozeile in ein “$”geändert hat. Dies deutet darauf hin, dass du als nicht-root Benutzer arbeitest. Du kannst auch ab dem nächsten Mal unter diesem Benutzer direkt eine SSH-Verbindung zum Server aufbauen. Du meldest dich dann quasi als der betreffende Benutzer auf dem entfernten System an. Hierfür musst du nur anstelle des root den Benutzernamen vor dem “@”tippen.
Ist dein System neu aufgesetzt worden, empfehle ich dir das System auf den aktuellsten Stand zu bringen, indem du die folgenden Befehle nacheinander ausführst. Da du nicht mehr als root eingeloggt bist, wirst du jetzt einigen Befehlen ein sudo vorweg stellen.
$ sudo apt-get update
$ sudo apt-get upgrade
Daraufhin installierst du dir das unzip-Programm mit
$ sudo apt-get install unzip
Dieses ermöglicht dir Dateien zu entpacken, die du noch im Laufe des Tutorials herunterladen wirst.
Bevor es im nächsten Schritt mit dem Download von Terraform weiter geht, solltest du zunächst ein Verzeichnis erstellen, in dem du die Datei runterladen kannst. Wechsel zuerst ins home-Verzeichnis deines Benutzers mit
$ cd ~
und führe daraufhin
$ mkdir terraform_install &&cd terraform_install
aus. Hiermit erstellt du im home-Verzeichnis einen Ordner namens terraform_install und wechselst daraufhin direkt in dieses Verzeichnis. Download und Installation werden an dieser Stelle im folgenden Kapitel fortgesetzt.
Bist du bereit zu starten?
Oder hast du noch Fragen? Lasse dir jetzt dein Konto erstellen oder dich in einem persönlichen Gespräch beraten.
Download und Installation von Terraform
Das Terraform Package kannst du über die Downloadseite
von HashiCorp runterladen. Entsprechend der Architektur deines Linux Systems erhältst du den Downloadlink, wenn du auf diesen einen Rechtsklick ausführst und den Link kopierst. Mittels wget in Verbindung mit dem kopierten Link kannst du den Download wie folgt starten.
$ wget "hier Downloadlink einsetzen ohne Anführungszeichen"
Anmerkung: Du solltest nach dem Download mit Hilfe der Checksumme überprüfen, ob das Paket korrekt geladen wurde. Wie dies möglich ist wird auf der Downloadseite von HashiCorp selbst erklärt.
Nachdem das Paket geladen ist, muss es entpackt werden mit dem Befehl
$ unzip _downloaded_file_
Nun führst du noch die folgenden Befehle nacheinander aus, um die Installation von Terraform abzuschließen:
$ echo export PATH=$PATH:~/terraform_install >>~/.bashrc
$ source ~/.bashrc
Wenn du jetzt
$ terraform version
ausführst, sollte dir die Version von Terraform angezeigt werden. Dies bedeutet, dass Terraform einsatzbereit ist.
gridscale Terraform provider
Als nächstes zeige ich dir wie du das notwendige Binärprogramm für die Verwendung mit gridscale erhalten kannst und wie du an Beispiele gelangst, die dir einen ersten Einblick in die Verwendung mit gridscale als Provider verschaffen. Außerdem zeige ich dir in diesem Schritt, in welchem Pfad sich das Binärprogramm befinden muss, damit diese korrekt funktioniert.
Zuerst erstellst du folgendes Verzeichnis und navigierst dich anschließend dahin:
$ mkdir ~/.terraform.d/ &&cd ~/.terraform.d/
Daraufhin erstellst du ein neues Verzeichnis namens plugins und darin ein weiteres namens linux_amd64 und wechselst in dieses:
$ mkdir -p plugins/linux_amd64 &&cd plugins/linux_amd64
Hier lädst du das nötige Linux Binärprogramm runter, worüber Terraform mit gridscale als Provider genutzt werden kann.
Wenn die Datei nicht in das aktuelle Verzeichnis heruntergeladen wurde, verschiebe sie hierhin und ändere den Dateinamen in:
$ mv ~/.terraform.d/plugins/linux_amd64/terraform_provider_gridscale
Die heruntergeladene Datei ist so noch nicht ausführbar. Um das zu ändern, verwendest du folgenden Befehl:
$ chmod 755 terraform_provider_gridscale
Beispiele
Jetzt fehlen nur noch die Beispiele. Navigiere zuerst wieder zum /.terraform.d Verzeichnis mit
$ cd ~/.terraform.d/
Wir haben die Beispiele in einem git repository zur Verfügung gestellt. Diese kannst du mit folgendem Befehl klonen:
$ git clone git@github.com:gridscale/terraform_examples.git
Hiermit ist die Vorbereitung abgeschlossen.
Anwendungsbeispiel
Nun werde ich dir an einem Beispiel zeigen, wie du mit Hilfe von Terraform Server, Storage und Netzwerk auf einmal erstellen kannst. Die anderen Beispiele funktionieren nach demselben Prinzip, sind aber Anwendungsbeispiele um die entsprechenden Ressourcen einzeln zu erstellen. Mit diesen kannst du im Anschluss weiter arbeiten.
Als Erstes navigierst du zum Verzeichnis, in dem sich deine Beispiel-Konfigurationsdatei befindet. In diesem Fall navigierst du zum Verzeichnis, in dem sich der Ordner „complete“ befindet. Hast du alles wie beschrieben ausgeführt, sollte sich der Ordner im Verzeichnis ~/.terraform.d/terraform-examples/single-server/complete befinden. Befindet sich der Ordner mit den Beispielen in einem anderen Verzeichnis, ist es nicht kritisch. Wichtig ist nur, dass du dich in das entsprechende Verzeichnis navigierst, in das der Ordner heruntergeladen oder verschoben wurde.
In diesem Verzeichnis führst du folgende zwei Befehle nacheinander aus:
$ terraform init
daraufhin
$ terraform apply
Hier wirst du nach deinem API Token und nach der UUID gefragt.
Über folgenden Link navigierst du zum Menüpunkt “API-Keys ”innerhalb des gridscale Panels und erzeugst deinen API-Token über den Button “API-Token erzeugen ”. Hier findest du auch an derselben Stelle deine UUID. Beides gibst du nun im Terminal ein und bestätigst deine Eingaben am Ende mit „yes“. Nun müsste dir ein Text ausgegeben werden mit den entsprechenden Konfigurationen und Server, Storage und Netzwerk sollten jetzt in deinem Panel existieren.
Damit du nicht jedes Mal deine UUID und deinen API Token eingeben musst, gibt es zwei Möglichkeiten (Verwendung von Umgebungsvariablen oder Konfigurationsdatei) diese Informationen einmal im Rechner zu hinterlegen, um diesen Prozess zu automatisieren.
Möglichkeit: Konfigurationsdatei
Du erstellst in dem Ordner, in dem sich deine auszuführende Datei befindet, eine weitere Datei mit der Endung .tf
(bspw. provider.tf). In diese Datei tippst du folgende Codezeilen und ergänzt innerhalb der Anführungszeichen deine UUID und deinen API-Token:
Provider "gridscale" {
uuid = "deine uuid"
token = "dein Token"
}
Anschließend musst du in der Datei server.tf die oberste Zeile mit provider „gridscale“ {} entfernen, da sonst ein Konflikt mit der zuvor erstellten Datei zustande kommt, in der unser Provider schon angegeben ist.
Um eine Datei über das Terminal erstellen zu können gibst du folgenden Befehl ein:
$ touch provider.tf
Um eine Datei öffnen und bearbeiten zu können nutzt du folgenden Befehl:
$ nano provider.tf
Nun kannst du erneut über das Terminal zu diesem Verzeichnis navigieren und die beiden Befehle terraform init und terraform apply ausführen und wirst feststellen, dass du nur noch die Ausführung mit einem „yes“ bestätigen musst.
Es ist aber auch möglich, die Informationen direkt in dem server.tf file zu ergänzen, anstatt eine neue Datei zu erstellen. Hierbei behältst du die oberste Zeile und ergänzt die Zeilen mit der uuid und dem token innerhalb der geschweiften Klammern.
Möglichkeit: Umgebungsvariablen
Bei dieser Methode musst du keine extra Datei anlegen mit den oben gezeigten Codezeilen. Somit ist es auch nicht mehr notwendig die oberste Zeile in der server.tf Datei zu entfernen. Du musst hierfür das Terminal öffnen und folgenden Befehl eingeben:
$ export GRIDSCALE_UUID=deine uuid
$ export GRIDSCALE_TOKEN=dein token
Wenn du nun env im Terminal ausführst sollten dir deine Umgebungsvariablen angezeigt werden, ebenso wie deine gerade erstellen Variablen.
Wenn deine SSH-Verbindung getrennt wird, existieren die erstellten Umgebungsvariablen nicht mehr. Diese sind temporär hinterlegt, solange die SSH-Verbindung aktiv ist.
Entfernen kannst du deine Variablen wieder, indem du statt export den Befehl unset verwendest.
$ unset GRIDSCALE_UUID
$ unset GRIDSCALE_TOKEN
Sollte man die erstellte Infrastruktur nicht mehr benötigen, kann man diese auch wieder mit
$ terraform destroy
entfernen.
Du solltest nun in der Lage sein, eigenständig mit anderen Beispielen vertraut zu werden und eigene Konfigurationsdateien zu erstellen. Ich wünsche dir viel Spaß bei der weiteren Verwendung mit Terraform und gridscale!