Infrastructure-as-Code mit Open Source in Azure und AWS Automatisierung in der Cloud mit Terraform

Von Thomas Joos 4 min Lesedauer

Terraform gehört zu den bekanntesten Tools, wenn es darum geht die Erstellung und Konfiguration von Ressourcen in der Cloud, der Container-Umgebung oder im eigenen Datacenter zu automatisieren. Admins erstellen hierfür in Terraform deklarative Skripte.

Die Bereitstellung, Verwaltung und Orchestrierung von Multicloud-Umgebungen ist komplex für DevOps-Teams; Infrastructure-as-Code, wie es das plattformunabhängige Terraform nutzt, sorgt für Entlastung.(Bild:  Alex - stock.adobe.com)
Die Bereitstellung, Verwaltung und Orchestrierung von Multicloud-Umgebungen ist komplex für DevOps-Teams; Infrastructure-as-Code, wie es das plattformunabhängige Terraform nutzt, sorgt für Entlastung.
(Bild: Alex - stock.adobe.com)

Terraform ist ein bekanntes Open Source-Tool, mit dem Admins über Skripte die Erstellung und Konfiguration von Ressourcen in der Cloud automatisieren können. Dadurch können Admins Skripte schreiben, die auch eine große Menge an Ressourcen in verschiedenen Cloud-Lösungen automatisiert erstellen oder konfigurieren.

Dazu ist keine umfassende Serverlösung notwendig, sondern die ausführbare Datei von Terraform reicht dabei aus. Der Einstieg ist damit sehr schnell möglich. Neben AWS und Azure kann Terraform natürlich auch in anderen Cloud-Umgebungen zum Einsatz kommen, zum Beispiel GCP. Das Tool steht in der Community-Edition kostenlos zur Verfügung. In größeren Umgebungen sollte das Produkt lizenziert werden, um auch Support zu erhalten.

Terraform nutzt JSON und HCL

Idealerweise kommt bei der Verwendung von Terraform die Hashicorp Configuration Language (HCL) oder JSON zum Einsatz. Über die Sprachen erstellen Admins oder Entwickler ein Skript, das einen Bauplan für die Ressourcen darstellt, die Terraform in der jeweiligen Cloud erstellen soll. Dabei können die einzelnen Ressourcen auch in Abhängigkeiten zueinanderstehen und es ist möglich, Objekte zu erstellen, welche die Ressourcen brauchen. Aktualisieren lassen sich dadurch auch größere Umgebungen, natürlich komplett skriptbasiert.

Terraform kann außerdem Ressourcen in der Cloud auf Konformität überprüfen. Sind die Ressourcen nicht konform, kann Terraform diese löschen und neu erstellen, nach Vorgabe im Skript.

Einstieg in Terraform

Terraform steht als ausführbare Datei für Windows, Linux und macOS zur Verfügung. Der Download besteht generell aus einer einzelnen Datei „terraform.exe“. Seine Version zeigt Terraform mit „terraform.exe -v“ an. Das Tool kann daher in der Shell und Befehlszeile genutzt, oder direkt in Visual Studio eingebunden werden. Eine Hilfe ist mit „terraform -help“ verfügbar. Dazu kommen auch Hilfen für jeden einzelnen Parameter von Terraform, zum Beispiel „terraform -help plan“.

Skripte müssen vor der Ausführung erst mit „terraform init“ initialisiert werden. Mit „terraform plan“ wird das Skript auf Plausibilität überprüft und mit „terraform apply“ ausgeführt. Bereits erstellte Umgebungen können mit „terraforrm refresh“ aktualisiert werden. Rückgängig machen lassen sich die Aktionen mit „terraform destroy“. Bei der Ausführung löscht Terraform die erstellten Objekte.

Beispiel 1: Bereitstellung einer EC2-Instanz auf AWS

Um eine EC2-Instanz auf AWS bereitzustellen, wird eine Konfigurationsdatei mit der Endung .tf erstellt. In dieser Datei wird der AWS-Provider angegeben und die Eigenschaften der EC2-Instanz definiert.

hclCode kopierenprovider "aws" { region = "us-west-2"}resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "ExampleInstance" }}

In diesem Beispiel wird eine EC2-Instanz des Typs t2.micro in der Region us-west-2 bereitgestellt. Das Amazon Machine Image (AMI) wird durch seine ID spezifiziert. Die Tags helfen, die Instanz zu identifizieren.

Beispiel 2: Erstellung eines S3-Buckets

Die Erstellung eines S3-Buckets auf AWS kann ebenfalls mittels Terraform realisiert werden. Eine Konfigurationsdatei enthält die Definition des S3-Buckets:

hclCode kopierenprovider "aws" { region = "us-west-2"}resource "aws_s3_bucket" "example_bucket" { bucket = "my-unique-bucket-name" acl = "private" tags = { Name = "ExampleBucket" Environment = "Dev" }}

Hier wird ein S3-Bucket mit dem Namen my-unique-bucket-name und der Zugriffskontrollliste private erstellt. Tags werden hinzugefügt, um den Bucket zu kategorisieren und den Entwicklungsumgebung zuzuordnen.

Beispiel 3: Erstellung einer Azure Virtual Machine

Die Bereitstellung einer virtuellen Maschine auf Azure erfordert die Definition des Azure-Providers und der VM-Eigenschaften in der .tf-Datei:

hclCode kopierenprovider "azurerm" { features {}}resource "azurerm_resource_group" "example" { name = "example-resources" location = "West Europe"}resource "azurerm_virtual_network" "example" { name = "example-vnet" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name}resource "azurerm_subnet" "example" { name = "example-subnet" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.example.name address_prefixes = ["10.0.1.0/24"]}resource "azurerm_network_interface" "example" { name = "example-nic" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name ip_configuration { name = "internal" subnet_id = azurerm_subnet.example.id private_ip_address_allocation = "Dynamic" }}resource "azurerm_virtual_machine" "example" { name = "example-vm" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name network_interface_ids = [azurerm_network_interface.example.id] vm_size = "Standard_DS1_v2" storage_os_disk { name = "example-os-disk" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } storage_image_reference { publisher = "Canonical" offer = "UbuntuServer" sku = "18.04-LTS" version = "latest" } os_profile { computer_name = "example-vm" admin_username = "adminuser" admin_password = "P@ssw0rd1234!" } os_profile_linux_config { disable_password_authentication = false }}

In diesem Beispiel wird eine Ressourcengruppe, ein virtuelles Netzwerk, ein Subnetz, eine Netzwerkschnittstelle und eine virtuelle Maschine in Azure bereitgestellt. Die Konfigurationsdatei enthält alle notwendigen Parameter, um die VM zu erstellen und zu konfigurieren.

Die Umsetzung der gezeigten Skripte in der jeweiligen Cloud-Plattform erfolgt durch eine standardisierte Vorgehensweise, die bei allen Anbietern ähnlich abläuft.

Bildergalerie
Bildergalerie mit 6 Bildern

Bereitstellung in AWS und Azure

Für das Beispiel der Bereitstellung einer EC2-Instanz und eines S3-Buckets in AWS wird eine Konfigurationsdatei mit der Endung .tf erstellt. Die Konfiguration der AWS-CLI ermöglicht die Authentifizierung. Nach der Erstellung der Konfigurationsdatei werden folgende Schritte durchgeführt:

  • 1. Initialisierung des Terraform-Arbeitsverzeichnisses mit terraform init.
  • 2. Überprüfung des Konfigurationsplans mit terraform plan, um sicherzustellen, dass die Ressourcen korrekt definiert sind.
  • 3. Anwendung des Plans mit terraform apply, wodurch die EC2-Instanz und der S3-Bucket bereitgestellt werden.

Für die Bereitstellung einer virtuellen Maschine in Azure muss ebenfalls eine Konfigurationsdatei erstellt werden. Zuerst erfolgt die Authentifizierung bei Azure durch das Ausführen von az login mit der Azure-CLI. In beiden Fällen folgt die Umsetzung einem standardisierten Muster: Initialisierung (terraform init), Planerstellung und -überprüfung (terraform plan) sowie Anwendung des Plans (terraform apply). Dieses Muster stellt sicher, dass alle erforderlichen Ressourcen konsistent und reproduzierbar in der jeweiligen Cloud-Umgebung bereitgestellt werden. Terraform ermöglicht durch seine deklarative Syntax die einfache Verwaltung und Skalierung der Infrastruktur.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Cloud Computing

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

(ID:50110992)