Türchen #6: Terraform Cloud: Ein Überblick


Infrastructure as Code (IaC)

Es gibt mehrere Wege, wie eine Cloud Infrastruktur verwaltet werden kann. Einmal über das Portal des jeweiligen Cloud Anbieter, dies ist auf den ersten Blick schnell erledigt, mit smarten Wizards, die den Administrator durch die Einrichtung des Service lenken. So schnell hier die Infrastruktur auch errichtet ist, so komplexer sind zukünftige Änderungen, von Disaster-Recovery mal ganz zu schweigen.

Hier setzen Werkzeuge wie Terraform an: diese ermöglichen - nach kurzer Einarbeitung - Infrastruktur zu “programmieren”. Mit wenigen Zeilen Code erstellt der Anwender seine Infrastruktur und bekommt von Haus aus einige Vorteile geliefert:

  • Automatisierung
  • Versionierung
  • wiederverwendbarer Code
  • effizientes Konfigurationsmanagement
  • Dokumentation

Die Vorteile liegen klar auf der Hand, mit Infrastruktur als Code ist eine Umgebung im Problemfall schnell wieder betriebsbereit.

Terraform Cloud

Die Terraform Cloud ist ein SaaS, der zuvor als Terraform Enterprise vermarktet wurde und nun gratis zur Verfügung steht. Du erhältst hier eine Weboberfläche, mit der dein Terraform Prozess gemanagt werden kann. Der Dienst ist teamfähig, wird mit dem jeweiligen Git Repository verbunden und es können Workflows abgebildet werden.

Die Projekte werden in den jeweiligen Workspaces gesteuert, dabei stellt ein Workspace eine Verbindung zu Git Repository dar. Im Workspace werden die Zugangsdaten, Umgebungsvariablen, Terraformvariablen hinterlegt, und die benötigte Terraform Version bestimmt werden. Eines der Hauptfeatures ist sicherlich der Workflow, der ebenfalls im Workspace beheimatet ist und ein gemeinsames Arbeiten ermöglicht.

Was bekomme ich

  • kostenloser Service
  • Web UI
  • gemeinsames Arbeiten
  • Workflow mit Git Anbindung (Github, Gitlab, Bitbucket)
  • Management vieler Terraform Projekte
  • private Module

Verbindung zum Backend

Terraform Cloud übernimmt den Remote State und das Locking, somit ergeben sich einige Änderungen in der Konfiguration. Das Einrichten eines S3 Buckets für das State File, sowie die Einrichtung einer DynamoDB entfallen. Dafür muss aber die Terraform Cloud als Remote Backend konfiguriert werden.

terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "Meine-Organisation"

    workspaces {
      name = "mein-projekt-workspace"
    }
  }
}

Konfiguration des Workspace

Terraform Cloud benötigt zur Ausführung von Plan und Apply die Zugangsdaten deines Cloud Anbieters, dies beschreibe ich exemplarisch für die AWS Cloud.

Über die AWS Konsole kann der benötigte IAM Benutzer eingerichtet werden, dieser benötigt mindestens “PowerUserAccess”, damit auch Resourcen angelegt werden können. In der Terraform Cloud müssen dabei der “Access Key” hinterlegt werden. Wichtig ist dabei, dass diese als sensitive Daten gekennzeichnet werden.

PowerUser Policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "NotAction": [
                "iam:*",
                "organizations:*",
                "account:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteServiceLinkedRole",
                "iam:ListRoles",
                "organizations:DescribeOrganization",
                "account:ListRegions"
            ],
            "Resource": "*"
        }
    ]
}

Der erstellte Access Key wird in der Terraform Cloud im Workspace unter Variables eingetragen, die benötigten Einträge werden im Screenshot beschrieben.

Anpassung der Umgebungsvariablen

Verbindung zum Git Repository

In den Organisationseinstelllungen (Settings) können die “VCS Providers” verwaltet werden. Dort wird auch das Git Repository registriert.

Verlinkung zwischen Gitlab und app.terraform.io


Nach der Registrierung kann der Workspace mit dem Repository Mittels Callback URL kommunizieren, sodass nun ein Workflow möglich ist:
  • Commit und Push
  • Plan
  • Approve/Decline
  • Apply

Hinweise

  • Terraform findet die Datei "terraform.tfvars" nicht automatisch, deshalb sollte diese in "*.auto.tfvars" umbenannt werden, "*" kann hierbei zum Beispiel für den Namen das Git Branches stehen
  • die Terraform Version sollte die gleiche sein wie die lokal installierte
  • die Terraform Version im Workspace muss explizit im Workspace ausgewählt werden, ein Update auf eine neuere Version findet nicht automatisch statt

Was Terraform Cloud noch bietet

Private Module

Nach einigen Projekten stellt man fest, dass sehr oft immer wieder ähnliche Dinge gebaut werden, daher sollte man auch mit Terraform beginnen zu modularisieren. Terraform bietet hier ein Registery, wo die Module registriert und versioniert werden können. Mehr Informationen findest du hier.

Weitere Informationen

https://app.terraform.io/
https://www.terraform.io/docs/cloud/index.html

Zurück zu den Blogbeiträgen

Trainings und Workshops

Vom Kurs für Einsteiger bis hin zu Experten-Workshops mit Tiefgang können wir Euch mit technischen Trainings unterstützen. Darüber hinaus bieten wir auch Workshops mit Fokus auf Cloud-Strategie oder für die Vertriebsmannschaft an.

Mehr...