Infrastruktur as Code und Pulumi – ein neuer Konkurrent von Terraform

Was genau ist „Infrastructure as Code“? Und wieso existiert sie?

Je mehr Automatisierung, desto besser für jeden Software Entwickler, denn jeder Software-Entwickler will sich auf Code konzentrieren und findet mit der Cloud einen Weg viele Aufgaben und Prozesse zu automatisieren.

Seit Cloud bekannt geworden wurde, verstärkt sich das Konzept „Infrastructure as Code“ (IaC). Die Idee dahinter ist: wir behandeln die Infrastrukturkonfiguration genau wie unseren Programmcode, d.h. Prinzipien von Software-Engineering wie z.B. Codeverwaltung, Updates mit Commits, Code-Review, Automatisierung, Versionierung und Testing dürfen nun auch Bestandteil der Infrastrukturkonfiguration sein.

Heute wollen wir uns nicht mehr bei AWS, Azure, Google Cloud, usw. anmelden und mit Klicken auf Buttons unsere Infrastruktur konfigurieren. Da können wir viele Fragen stellen, wie z.B.:

  • Was passiert, wenn man auf den falschen Button klickt und etwas löscht?
  • Was passiert, wenn das ganze System über Nacht runterfährt?
  • Oder was noch passiert, wenn man die Infrastruktur zu einem anderen Cloud-Anbieter verschieben muss?

Mit IaC existieren diese Probleme nicht mehr, weil wir die Kontrolle über unsere ganze Infrastruktur im Code haben können!

Batch Scripts und CLI-Kommandos waren schon der erste Automatisierungsversuch, aber diese können den Zustand der Infrastrukturkonfiguration nicht verfolgen.

Danach wurden die Template-Sprachen wie YAML und JSON bekannt geworden und heute bieten alle Cloud-Anbieter diesen Lösungsart an. Die Lösungen für IaC von Cloud-Anbieter können auf einer Seite nützlich und stabil sein, weil sie zum Cloud-Anbieter-Ökosystem gehören. Aber am Ende haben wir eine „Verkäufersperre“, die teuer sein kann, wenn wir z.B. den Cloud-Anbieter wechseln müssen und natürlich können wir das System nicht über Multi-Cloud mit dem einzelnen Tool laufen lassen, weil es bei diesem bestimmten Anbieter gesperrt ist. In diesem Fall sind wir komplett vom Cloud-Anbieter abhängig.

Dagegen gibt es Cloud-Engineering-Systeme als Alternative wie z.B. Terraform.

Und wieso Pulumi?

Terraform ist ein gutes und bekanntes IaC-System und lässt uns wichtige Ziele erreichen:

  • Unabhängigkeit der Infrastruktur von Cloud-Anbieter;
  • Multi-Clouding Konzept wird von der Infrastruktur unterstützt

Damit ist nun alles perfekt, oder? Hm…Vielleicht noch nicht. Bei Lösungen wie Terraform müssen wir noch ihre einzelne Programmiersprache und Tools lernen, damit wir vom System wirklich profitieren können, d.h. Zeit investieren für Lernen.

Mit einem anderen IaC-System, wie Pulumi, können wir das gleiche robuste Ziel erreichen, aber mit allen was wir schon kennen und lieben, z.B. unsere Lieblingsprogrammiersprache. Wir können „For-Loops“ sowie unterschiedliche Konzepte aus der Software-Entwicklungswelt nutzen, wie z.B. Abstraktion, Kapselung verwenden, Klassen und Funktionen teilen und das gleiche Modell wiederverwenden.

Noch dazu können wir unsere Lieblingstools verwenden wie Linters, Editors, Debuggers und Testing-Frameworks. Damit stehen Infra-Teams und Entwickler näher und sie können gegenseitig einfacher kommunizieren, genau wie ein DevOps-Konzept funktionieren sollte.

Ein bisschen Geschichte

Ende 2016 haben die Software-Entwickler Joe Duffy und Eric Rudder mit dem Pulumi-Projekt angefangen.

In 2017 wurde Pulumi als Firma gegründet und im Juni 2018 wurde die erste Version publiziert.

Am Anfang hatte Joe Duffy, ein erfolgreicher .NET Entwickler, Interesse an IaC und ärgerte sich mit so vielen Zeilen von YAML, JSON herum, als er mit IaC zu arbeiten begann. Seiner Meinung nach gab es noch viel manuelle Arbeit für die Verbindung mit API-Endpoints. Obwohl er 20 Jahre Erfahrung in der Industrie hatte, fand er die Umsetzung von Code in der Cloud schwer. Hier erläutert er seine erste Erfahrung.

Darum wollte Joe mit seinem Kollege Eric ein Cloud-Enginnering-Tool entwickeln, mit dem Prinzip No-YAML / No-DSL und mit dem Ziel den ganzen Code-Aufwand stark zu reduzieren.

Und wie funktioniert Pulumi im Hintergrund

Pulumi ist eine mehrsprachige und Multi-Cloud-Entwicklungsplattform. Es ermöglich, alle Aspekte von Cloud-Programmen mit echten Sprachen und echtem Code zu erstellen, von der Infrastruktur bis hin zur Anwendung selbst. Das Prinzip ist: „Schreiben Sie einfach Programme und führen Sie sie aus, und Pulumi findet den Rest heraus„.

Im Zentrum von Pulumi steht ein Cloud-Objektmodell, welches versteht:

  • Programme, die in einer beliebigen Sprache geschrieben sind
  • erforderlichen Cloud-Ressourcen, um die Programme auszuführen
  • wie Cloud-Ressourcen auf robuste Weise geplant und verwaltet werden

Dieses Cloud-Runtime- und Objektmodell ist Cloud-neutral, deswegen werden viele Sprachen und Cloud-Lösungen seit Anfang des Projekts unterstützt.

Atlassian – ein Pulumi Study-Case

Pulumi ist neu aber es wird schon bei einigen grossen Firmen umgesetzt, wie Snowflake, Mercedes Benz, und Atlassian usw.

Den Study-Case von Atlassian fand ich persönlich interessant.

Für die Steigerung der Entwicklungsproduktivität hat das Bitbucket-Entwicklungsteam von Sidney seinen DSL-basiertes Altsystem (Terraform) nach Pulumi Cloud Engineering Plattform migriert.

Das Entwicklungsteam hat Terraform verwendet, bei dem sie die domänenspezifische Sprache (DSL) erlernen mussten, aber die DSL war für die meisten Entwickler nicht intuitiv.

Aufgrund der Einschränkungen von DSL wäre es nicht einfach, Infrastrukturbereitstellungen für das Sydney-Team zu kodifizieren. Das Team müsste eine komplizierte DSL erlernen, um seine Aufgabe zu erledigen und das wäre unproduktiv und zeitaufwändig. Darüber hinaus war das Team relativ neu im Umgang mit AWS und Cloud.

Mit Pulumi besteht die Möglichkeit Cloud-Infrastrukturen und -Anwendungen mit einer Programmiersprache nach Wahl wie TypeScript, JavaScript, Python, Go und .NET zu erstellen, bereitzustellen und zu verwalten. Das bedeutet, dass sie Standardprogrammierungskonstrukte und Standardtools verwenden können, um IaC zu erstellen und zu verwalten.

Da das Entwicklungsteam Python im Alltag schon verwendet, wurde Python als Programmiersprache für die ganze IaC mit Pulumi ausgewählt.

Das Ergebnis war eine grosse Steigerung der Entwicklerproduktivität: die Wartungszeit von Entwicklern mit ihren Instanzen wurde um mehr als 50% reduziert.

Meine erste Erfahrung mit Pulumi

Da ich schon Videos und Informationen über Pulumi angeschaut sowie gelesen habe, wollte ich noch Pulumi installieren und eine erste Aufgabe damit machen.

Ich habe beim Pulumi-Learning die erste Aufgabe gemacht (Docker war schon in meinem Rechner installiert, aber Python musste noch installiert werden).

Die drei Schritten der Aufgaben wurden gemacht und es gab schon viel Neues für mich.

Mit der Anleitung habe ich festgestellt, dass gewisse Zeit für das Lernen benötigt wird, auch da ich noch nicht viele Erfahrung mit Python habe.

Auf einer anderen Seite fand ich intuitiv und angenehm wie das Pulumi-Tool im Terminal funktioniert.

Da ich ein Entwickler mit wenig Cloud-Erfahrung bin, ist es gut für mich, ein neues IaC-Tool zu entdecken und die Hauptprinzipien mitzubekommen.

Am Ende der Anleitung freute ich mich, die erste Applikation mit Pulumi im Browser zu sehen.

Abschluss

Pulumi hat ein starkes Konzept für IaC. Mit Pulumi müssen keine grossen YAML und JSON-Dateien verwendet werden und neue DSL müssen nicht gelernt werden. Jedes Entwicklungsteam sollte erkennen, dass mehr als 80% der Infrastruktur mit der Lieblingsprogrammiersprache verwendet werden kann und das wird der neue Schritt bei IaC sein.

Bei IaC kann man schon eine Richtung für die Zukunft sehen: IaC Cloud Engineering Tools, wie Pulumi, machen das Leben von Entwicklern einfacher und bringen Entwickler näher zum Operation-Team, genau wie ein DevOps-Konzept sein muss.

Ob Pulumi erfolgreich sein wird, kann ich nicht sagen, aber in der IaC-Welt sehe ich, dass dieses Baby-Projekt schon ein gutes Potenzial hat.

Zum Schluss stelle ich mir vor, dass ein Entwickler, der mit Cloud Engineering Systems arbeitet, anders denkt und kann die Business-Cases noch mit anderen Augen sehen. In seinem Code werden auch Prinzipien bezüglich Cloud-Ressourcen und Netzwerk auch dabei sein, nicht nur die Business-Logik.

Auf diesen neuen Entwicklungsart bin ich neugierig geworden, will weiter lernen und hoffe das Interesse von einigen Lesern zu wecken.

Beitrag teilen

Francisco Mariani Guariba Filho

Software Engineer, Student bei CAS Cloud and Platform Manager

Alle Beiträge ansehen von Francisco Mariani Guariba Filho →

Schreibe einen Kommentar