BlogInfrastructure-as-Code in Azure mit Terraform

Infrastructure-as-Code in Azure mit Terraform

Auch wenn der Azure Resource Manager als zentrale Deployment Engine in Azure mit seinen Resource Manager Templates (ARM) selbst ein deklaratives Bereitstellung-Paradigma unterstützt, kann es unter Umständen lohnend sein, zu diesen Zweck auf Terraform zu setzen.

Unabhängig technologischer Unterschiede, bzw. Vor- oder Nachteile zwischen ARM und Terraform kann es durchaus sein, das Unternehmen bereits über umfangreiche Terraform-Expertise verfügen. Warum also nicht einfach darauf aufbauen, statt sich auf ein neues Modell einzulassen. Nachdem wir dir in den zurückliegenden Beiträgen gezeigt haben, wie und mit welchen Werkzeugen du Bereitstellungen in Azure mit ARM und Bicep durchführen kannst, werfen wir mit diesem Beitrag einen Blick auf Terraform, insbesondere die Integration von Terraform mit der Azure Platform.

Dazu zeigen wir dir exemplarisch wie du eine Azure Resource, wie z. B. ein virtuelles Netzwerk, mit Hilfe von Terraform in Azure bereitstellen kannst. Für das weitere Verständnis ist es ausnahmsweise sinnvoll, das Pferd von hinten aufzuzäumen und einen Blick auf das fertige Terraform-Deployment-Skript für dieses Beispiel zu werfen. Dazu ist es empfehlenswert, in Visual Studio Code die Erweiterung „Azure Terraform“ zu installieren: Visual Studio Code weist dich sogar automatisch darauf hin, dass der Marketplace passende Erweiterungen für *.tf-Dateien enthält, sobald du eine Datei mit der Endung .tf speicherst.


Terraform-Erweiterungen in VS Code.

Installiere jetzt die beiden Erweiterungen „Terraform“ und „Azure Terraform“. Solbad die Erweiterungen installiert ist, verfügst du unter anderem über eine Autovervollständigung für Terraform-Syntax und fertige tf-Dateien werden dir mit Syntax-Highlighting angezeigt.

Wenn Sie offline mit Terraform entwickeln, verwenden Sie auf jeden Fall VS Code.

Inhaltlich sieht unsere Datei so aus:

Unschwer zu erkennen ist in Zeile 1, dass du einen Terraform Resource Provider für Azure benötigst. Dieser heißt „azurerm“. Wie du auf der https://registry.terraform.io/browse/providers Terraform-Registry-Seite erkennen kannst, stellt Terraform zahlreiche Provider für die unterschiedlichsten Partner-Lösungen zur Verfügung.


Die zahlreichen Terraform-Provider.

Der weiteren Einträge im oben gezeigten Terraform-Bereitstellungsskript sind weitgehend selbsterklärend und wie bei ARM formal in JSON verpackt:

Das Skript stellt ein virtuelles Netzwerk namens „td-vnet-tf“ mit dem Adressbereich 10.0.0.0/16 in einer Ressourcengruppe „tf-rg“ mit zwei Subnetzen „Frontend“ (10.0.0.0/24) und „Backend“ (10.0.1.0/24) sowie eine Netzwerksicherheitsgruppe „td-tf-SecurityGroup1“ bereit, die mit dem Subnetz „Frontend“ assoziiert wird. Die zugehörigen Ressource-Typen heißen in Terraform-Syntax “azurerm” (Terraform Provider), „azurerm_resource_group“ (Azure Resource Group), „azurerm_virtual_network” (Azure Virtual Network) und „azurerm_network_security_group” (Azure Security Group).

Das eigentliche Bereitstellen dieser Terraform-Datei kann auf vielerlei Arten erfolgen. Theoretisch kannst du deine Terraform-Entwicklungsumgebung z. B. auf einer Azure-VM betreiben. Das ist aber meist gar nicht notwendig, weil z. B. die Azure Cloud Shell bereits mit einer Terraform-Integration ausgestattet ist. Starte also einfach eine BASH-Sitzung in der Azure Cloud Shell und überprüfe z. B. erst einmal die installierte Terraform-Version mit …

terraform version

Dabei wirst du vermutlich feststellen, dass es eigentlich bereits eine neue Terraform-Version gibt, die du allerdings in der Azure Cloud Shell nicht installieren kannst, wohl aber in einer lokal ausgeführten Azure CLI.

Die aktuelle Terraform-Version.

Nun erstelle einen Ordner für dein Projekt, wechsle in diesen, erstellen darin z. B.  mit Hilfe des eingebauten VS Code-Editors („code“ eingeben) oder mit „nano“/ „vi“ eine neue Datei vnet.tf mit dem oben gezeigten Inhalt und speichere sie in diesem Ordner ab.

Ihr Terraform-Bereitstellungsskript in der Cloud Shell, hier mit „nano“.

Arbeiten mit Terraform

Der zentrale Terraform-Workflow besteht aus drei Hauptschritten, sobald du deine Terraform-Konfiguration vorliegen hast:

  1. „Initialize“ („terraform init“) bereitet das Arbeitsverzeichnis vor, damit Terraform die Konfiguration ausführen kann.
  2. Mit „Plan“ („terraform plan“) kannst du Änderungen in der Vorschau anzeigen, bevor du sie anwendest.
  3. „Appy“ („terraform apply) führt die von deiner Terraform-Konfiguration definierten Änderungen aus, um Ressourcen zu erstellen, zu aktualisieren oder zu löschen.

Du musst also zuerst mit …

terraform init

eine Terraform-Initialisierung durchführen. Dabei werden unter anderem z. B. die Terraform-Resource-Provider ermittelt.

Die Terraform-Initialisierung.

Eigentlich kannst du deine Datei „vnet.tf“ direkt bereitstellen. Besser (für die spätere Anwendung in größeren Umgebungen) du lässt dir die durch die Bereitstellung erwartbaren Änderungen wie folgt als Vorschau anzeigen.

terraform plan -out vnet.tfplan

Das Ergebnis sollte so aussehen:

Eine Bereitstellung mit Vorschau.

Im unteren Teil der Ausgabe erfährst du auch gleich, …

Erfolgreiche Vorschau-Bereitstellung.

… wie du deine Bereitstellung mit

terraform apply „vnet.tfplan“

durchführen kannst. Tue das abschließend:

Eine erfolgreiche Bereitstellung

Überprüfe abschließend z. B. im Azure-Portal, ob das vNet erfolgreich bereitgestellt wurde:

Das erstellte vNet im Azure-Portal.

Kontakt

Bewertungen

Kundenstimme männlich
Lucas F.
Fa. Feld Textil GmbH
star-participantstar-participantstar-participantstar-participantstar-participant
Kann man nur weiterempfehlen! In kürzestem Zeitraum lernt man alle Basisdaten konkret und ausführlich.
Kundenstimme männlich
Michael W.
Ernst & Young Retail Services GmbH
star-participantstar-participantstar-participantstar-participantstar-participant
Ich fühlte mich in diesem Seminar hervorragend betreut. Es war sehr praxisorientiert und anschaulich.
Kundenstimme männlich
Wolfgang N.
ThyssenKrupp Nirosta
star-participantstar-participantstar-participantstar-participantstar-participant
Eine gute Adresse für das Erlernen scheinbar schwieriger und trockener Themen, die hier gut aufbereitet werden.
Kundenstimme männlich
Dimitri B.
HSBC Trinkaus
star-participantstar-participantstar-participantstar-participantstar-participant
Sehr informativ und in der Praxis wiederverwendbar.