2017
November
01
2017

"Infrastructure as Code" mit Terraform

Wenn Projekte über einen einzelnen Server hinaus wachsen macht es meist Sinn, die dafür benötigte Infrastruktur automatisiert zu verwalten. Nach Libcloud und Ansible ist es nun auch mit Terraform möglich, komplette Setups bei cloudscale.ch "as Code" zu definieren.

Was Terraform auszeichnet

Terraform ist ein prominenter Vertreter des Begriffs "Infrastructure as Code" und passt bestens in die DevOps-Philosophie heutiger Projekte. Wo Server bisher manuell in Betrieb genommen, nur selten identisch konfiguriert und oft gar nicht dokumentiert wurden, sorgt jetzt der umgekehrte Ansatz für Effizienz und Ordnung: Eine Konfigurations-Datei, die sowohl für Mensch als auch Computer gut lesbar ist, beschreibt die benötigte Infrastruktur – und Terraform erledigt den Rest.

Terraform arbeitet deklarativ: Sie beschreiben den gewünschten Zustand Ihres Setups, und Terraform leitet daraus die nötigen Aktionen ab. Sobald Sie die von Ihnen definierte Konfiguration anwenden, nimmt Terraform über unsere API die entsprechenden Anpassungen vor, bis der beschriebene Zustand erreicht ist. Und weil sich Ihre Infrastruktur – genau wie Code – im Laufe der Zeit ändert, werden Terraform-Konfigurationen am besten in Versionierungssystemen wie z.B. Git verwaltet.

Terraform ist ein Open-Source-Projekt. Die Software ist kostenlos erhältlich.

Wie Sie cloudscale.ch mit Terraform nutzen

Wenn Sie Terraform nutzen und damit auch Ihre Server bei cloudscale.ch verwalten möchten, binden Sie einfach das Plugin für den Provider "cloudscale" ein. Dieses läuft dann als separater Prozess und kommuniziert mit dem Terraform-Hauptprozess über eine RPC-Schnittstelle. Zusätzlich benötigen Sie ein API-Token mit "read/write access", welches Sie einmalig in unserem Cloud-Control-Panel erstellen müssen. Damit authentifiziert sich Terraform gegenüber unserer API bei jeder Änderung an Ihrer Infrastruktur.

Das Starten eines Servers mit Terraform ist denkbar einfach, wie der folgende Abschnitt zeigt:

# Create a new Server
resource "cloudscale_server" "web-worker01" {
  name           = "web-worker01"
  flavor_slug    = "flex-4"
  image_slug     = "debian-9"
  volume_size_gb = 50
  ssh_keys       = ["ssh-ed25519 XXXXXXXXXX...XXXX user@example.com"]
}

Dies ist natürlich nur ein einfaches Beispiel für einen einzelnen Server; alle verfügbaren Optionen für komplexere Setups finden Sie in unserer Terraform Provider-Dokumentation.

Zwei Tipps aus der Praxis

Dinge zu automatisieren spart viel Zeit. Doch was, wenn sich der Automatismus nicht so verhält wie beabsichtigt? Terraform kommt Ihnen hier entgegen: mit dem Kommando terraform plan sehen Sie detailliert, was Terraform auf dem Weg von der aktuellen zur gewünschten Konfiguration alles ändern würde. Bei Bedarf können Sie die Einstellungen in Ruhe nochmals überarbeiten – solange, bis der "Execution Plan" exakt Ihren Erwartungen entspricht. Erst dann nimmt ein terraform apply tatsächlich Änderungen an Ihrer Server-Infrastruktur vor.

Möglicherweise soll nicht jeder, der Zugriff auf Ihr Code- bzw. Konfigurations-Repository hat, auch Zugriff auf Ihre Services bei cloudscale.ch erhalten. Wir empfehlen Ihnen daher, Ihr API-Token innerhalb von Terraform als Variable zu übergeben und die entsprechende Quell-Datei von der Versionierung auszunehmen. Alternativ setzen Sie eine Shell-Umgebungsvariable namens "CLOUDSCALE_TOKEN", welche von Terraform automatisch verwendet wird.


Bei cloudscale.ch konnten Sie Ihre Infrastruktur schon immer nach Ihren Wünschen anpassen. Terraform nimmt Ihnen jetzt einen Schritt ab: Sie definieren Ihre Wunschkonfiguration, Terraform nimmt für Sie die nötigen Anpassungen vor.

Wir haben die Infrastruktur für Ihren Code!
Ihr cloudscale.ch-Team


PS: Terraform ist eine in Go geschriebene Software und setzt für jeden Provider ein entsprechendes Go SDK voraus. Unser Go SDK wurde unter MIT-Lizenz veröffentlicht und ermöglicht es Go-Entwicklern (unabhängig von Terraform), HTTPS-Requests nativ aus einer beliebigen Go Applikation heraus an unsere API zu schicken.

Zurück zur Übersicht