Automatisierung in der Cloud mit Terraform

In diesem Beitrag erläutern wir Hintergründe und Vorteile einer Automatisierung von Deployments in Public-Cloud-Umgebungen und stellen die automatisierte Provisionierung mittels Terraform vor.

 

Warum Deployments automatisieren?

Im Vergleich zu traditioneller IT-Infrastruktur liefern Cloud-Technologien in Sachen Design und Deployment relativ neuartige Ansätze. So kann beispielsweise firmeneigene Hardware durch generische Hardware ersetzt werden. Um agilere Deployments zu erzielen, muss man allerdings neue Preismodelle in Kauf nehmen und, bei Public-Cloud-Konzepten, die Kontrolle über die Hardware abgeben. Diese veränderten Voraussetzungen bringen einerseits Vorzüge mit sich, gleichzeitig aber auch Nachteile.

Obwohl sowohl AWS als auch Azure eine rundum unterstützende Benutzeroberfläche für das Deployment von Geschäftsfällen bieten, macht sich relativ schnell ihre schlechte Bedienbarkeit bzw. Benutzerfreundlichkeit bemerkbar. Keiner der beiden Cloud Provider besitzt eine Benutzeroberfläche, die die Steuerung und den Überblick für den Betreiber verbessert. Da das Roll-Out aller Instanzen stattdessen per Mausklick abgewickelt werden muss, sind Tasks typischerweise langwierig und fehleranfällig. In schnell wachsenden Umgebungen mit zahlreichen Instanzen steigert sich dieser Effekt natürlich entsprechend.

Das ist nicht unbedingt oder zumindest nicht ausschließlich schlecht designten Benutzeroberflächen geschuldet, sondern eher dem Design und Deployment von Cloud Computing allgemein. Der Ansatz beim Cloud-Design ist so unterschiedlich, dass grundsätzlich auch die Art und Weise des Deployments Anpassungen benötigt und an dem Konzept einer Cloud angepasst ist.

Hier kommen Automatisierungsprozesse ins Spiel. Beim Deployment und der Steuerung modernster Technologien ist die Automatisierung heute ein Schlüsselelement der IT-Branche. Systeme werden durch das Mapping manueller Tasks mit Code-basierten Tasksequenzen automatisiert. Das aktuelle Buzzword für automatisierte Cloud-Umgebungen lautet dabei Infrastructure as Code (IaC).

Infrastructure as Code (IaC)

Mithilfe von IaC kann man in einem ersten Schritt eine Infrastruktur in der Cloud initiieren und auf Code-Basis deklarieren. In deinem zweiten Schritt kann dann das sofortige Deployment erfolgen. IaC beseitigt die Komplexität moderner Systeme nicht, sondern verlagert sie auf eine andere Abstraktionsebene, wodurch das Deployment praktischer und leichter zu handhaben ist. So kann man einfache Textdateien mit einer vordefinierten Syntax bearbeiten statt per Mausklick Formulare ausfüllen.

Neben Konfigurationsmanagement-Tools wie Ansible, Chef und Puppet gibt es auch Hilfsmittel für die automatische Bereitstellung der Infrastruktur selbst, beispielsweise CloudFormation, Heat oder Terraform. Die Deklaration der Infrastruktur als Code erfolgt oftmals in Cloud-Umgebungen, wobei auch andere Deployment-Bereiche möglich sind.

Vorteile einer automatisiert bereitgestellten Infrastruktur

  • Konsistenz:
    Automatisch erstellte Instanzen bieten ein höheres Maß an Kontrolle im Hinblick auf die Konsistenz der Infrastruktur. Eigenschaften wie Namen, Beschreibungen oder die Größe von Instanzen werden klar deklariert und folgen bei jeder Neueinführung einer zuvor definierten Struktur.
  • Wiederverwendbarkeit:
    Jede fertige und ausführbare Vorlage kann problemlos wiederverwendet werden oder als Beispielvorlage für andere Szenarien dienen. So sparen Ingenieure Zeit und Kosten bei der Entwicklung und Bereitstellung. Diese Wiederholbarkeit macht jedes Element einer Cloud-Infrastruktur sofort reproduzierbar.
  • Versionskontrolle:
    Code schreiben geht normalerweise mit einer Versionskontrolle einher: Durch die Verfolgung von Änderungen im Code kann man bequem zu vorherigen Versionen zurückkehren oder vorspulen. Diese Rollback-Option vermeidet durch fehlerhafte Deployments verursachte Probleme.
  • Fehlerresistenz:
    Durch die Verlagerung wiederkehrender manueller Aufgaben zu automatisierten Tasks wird viel mühsame Kleinstarbeit eliminiert, was bessere Kontrollmöglichkeiten zur Folge hat und durch Menschen verursachte Fehler minimiert.
  • Scaling:
    Da jeder Teil der Infrastruktur sofort reproduzierbar ist, sind die verschiedenen Dienste auch bei hohen Bedarfsspitzen ständig verfügbar. Bei geringem Verkehr hingegen können Kosten gespart werden, da nicht benötigte Teile der Infrastruktur bei Bedarf abgeschaltet werden können.

Terraform

Terraform is ist ein von HashiCorp entwickeltes Open-Source-Tool für die Orchestrierung von Infrastrukturen. Dabei können sowohl Cloud-Umgebungen als auch Bare-Metal-Server bereitgestellt werden – in diesem Beitrag soll es jedoch um Cloud-Technologien gehen. Xantaro verwendet Terraform für ein automatisiertes Roll-In/Out von Instanzen und um Instanzen zu entfernen.

Eigenschaften von Terraform

  • Herstellerunabhängigkeit:
    Der große Vorteil gegenüber herstellerspezifischen Lösungen von Anbietern wie Cloud Formation (AWS), Azure Resource Manager oder Cloud Deployment Manager (Google) ist die Kompatibilität mit unterschiedlichen Cloud-Betreibern. Ein einziges Tool für alle Plattformen bedeutet weniger Aufwand im Hinblick auf Schulungen und den Aufbau von Wissen.
  • Unveränderliche Infrastruktur:
    Configuration Drift ist ein bekanntes und unter Umständen mühseliges Problem innerhalb von IT-Systemen. Oftmals sind Inkompatibilitäten zwischen mehreren Instanzen die Folge. Um diesen Nachteil zu vermeiden, werden im Workflow innerhalb von Terraform Instanzen nicht aktualisiert, sondern entfernt. Bei Änderungen werden dann neue Instanzen mit dem bereits integrierten Update erstellt. So werden Konfigurationsverschiebungen im gesamten System von Instanzen verringert.
  • Deklarative Programmierung:
    Deklarativer Code ist eine Programmiersprache, die den gewünschten Endzustand eines Systems spezifiziert. Logische Strukturen wie Loops oder if-Anweisungen, die in prozeduralen Sprachen üblich sind, sind nicht vorgesehen. Der deklarative Code besteht aus Anweisungen; das dahinter liegende System muss die Aufgabe erfüllen. Die entsprechenden Anweisungen werden im Key-Value-Format geschrieben.
  • Einfache Bedienung:
    Sobald ein Terraform-Code für ein bestimmtes System entwickelt wurde, kann er leicht mithilfe von kurzen Befehlen ausgeführt werden. Die Abbildung unten zeigt einen Workflow mit gängigen Befehlen in Terraform.
  • Dokumentation:
    Terraform wird mit einer umfangreichen Dokumentation für Entwicklung und Betrieb ausgeliefert. Darin finden sich zahlreiche Minimalbeispiele, die den Einstieg in das Schreiben des eigenen Codes erleichtern. Dank einer umfangreichen Community läuft die Entwicklung und Fehlerbehebung bei Terraform deutlich schneller ab als bei herstellerspezifischen IaC-Lösungen.

Terraform Workflow

Im Kern besteht der Workflow bei Terraform aus drei Schritten; ein vierter Schritt dient dem Abbau:

 

XAN_Terraform-Workflow

 

1:  Write – das Schreiben des IaC-Codes

2:  Plan – eine Vorschau der Änderungen vor der Anwendung

3:  Apply – Bereitstellung einer reproduzierbaren Infrastruktur

4:  Destroy – Abbau der Infrastruktur

 

Terraform-Code schreiben

Der erste Codeausschnitt zeigt beispielhaft, wie man den Anbieter, mit dem Terraform eine Verbindung herstellen soll, angibt. In diesem Fall müssen ein Zugriffsschlüssel, ein geheimer Schlüssel und eine Region angegeben werden, um eine Verbindung zu AWS herzustellen. Der Zugriffsschlüssel und der geheime Schlüssel müssen einmalig über die AWS-Web-Benutzeroberfläche generiert werden. In unserem Beispiel werden die Schlüssel durch globale Variablen ersetzt, was im Hinblick auf den Datenschutz zu empfehlen ist.

 

provider "aws" {
  access_key = "ACCESS_KEY"
  secret_key = "SECRET_KEY"
  region = "eu-central-1"
}

 

Der nächste Codeausschnitt beschreibt ein Minimalbeispiel für die Deklarierung von Ressourcen, die für die Erstellung einer Virtual Private Cloud (VPC) innerhalb der AWS-Cloud erforderlich sind. VPC ist ein AWS-spezifischer Begriff, der eine geschlossene Umgebung für private Anwendungsfälle bezeichnet. Die entsprechende Umgebung in der Azure Cloud nennt sich Virtual Network.

Das Keyword „resource“ ist ein obligatorisches Schlüsselwort, das eine Konstruktion zur Auflistung von Attributen initialisiert, die die Eigenschaften einer Instanz beschreiben. Einige Attribute sind erforderlich, andere wiederum optional. Die VPC benötigt mindestens ein IP-Prefix; alle anderen Attribute sind optional, auch wenn es von Vorteil ist, einen geeigneten Namen zu vergeben. Für das Erstellen von Server-Instanzen ist eine VPC zwingend erforderlich.

 

resource "aws_vpc" "test_netz" {
  cidr_block       = "10.10.0.0/16"

  tags = {
    Name = "Test_Netz"
  }
}

 

Um über Ubuntu eine Instanz in der VPC zu erstellen, sind drei Attribute notwendig: Zunächst muss das gewünschte Image deklariert werden. Dafür ist der Name des AWS-eigenen Amazon Machine Image (AMI) erforderlich. Als nächstes muss der gewünschte Instanztyp angegeben werden. Damit wird die Größe der Instanz bestimmt. „T2.micro“ beispielsweise entspricht 1 vCPU und 1 GB Speicher. Je größer die Instanz, desto leistungsfähiger ist sie, desto höher sind jedoch auch die Kosten. Schließlich wird noch ein Subnetz benötigt. Subnetze werden in einer separaten Ressource deklariert. Die ID des Subnetzes wird dann als Attribut im Bereich der Instanz referenziert. Das Subnetz selbst benötigt einen Verweis auf die VPC-ID, eine geeigneter IP-Pefix zur Untergliederung dess VPC-IP-Prefix und schließlich eine Availability Zone.

 

resource "aws_instance" "ubuntu" {
  ami           = "ami-0093cac2bf998a669"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.ubuntu_subnet.id

  tags = {
    Name = "Ubuntu_Client"
  }
}

resource "aws_subnet" "ubuntu_subnet" {
  vpc_id            = aws_vpc.test_netz.id
  cidr_block        = "10.10.10.0/24"
  availability_zone = "eu-central-1a"

  tags = {
    Name = "Ubuntu_Subnet"
  }
}

 

Dieser Beispiel-Code aus Terraform zeigt, wie man eine gewünschte Infrastruktur in Code verwandelt (IaC) und beschreibt ein Fallbeispiel dafür, wie man eine Ubuntu-Instanz in der AWS-Cloud erstellt. Das Ergebnis kann nun mit den entsprechenden Befehlen im Terraform-Workflow angewendet werden.

 

 


Teilen Sie Ihre Meinung mit uns!

Ihre Perspektive zählt! Hinterlassen Sie einen Kommentar zu unserem Blogartikel und lassen Sie uns wissen, was Sie denken.

17/03/2022

Marcel F.

Marcel F.

Xantaro Deutschland GmbH
Thema
Hersteller

IT-Netzwerke: So sichern Sie Security und Verfügbarkeit

Jetzt lesen

So fällt der Einstieg ins eigene 5G-Campusnetz nicht schwer

Jetzt lesen

Wege zur Implementierung einer SASE-Lösung im Unternehmen

Jetzt lesen

IT-Sicherheit mit Next-Gen-Firewalls

Jetzt lesen

Wie SASE Unternehmensnetzwerke vor Cyberbedrohungen schützt

Jetzt lesen

Sie möchten mehr über Automation in der Public Cloud erfahren?

Jetzt Experten fragen!
Chat