
Flashizzle/peopleimages.com - st
Infrastruktur automatisiert mit Terraform verwalten
Terraform automatisiert die Bereitstellung und Verwaltung von Infrastructure as Code. Ressourcen lassen sich versioniert, nachvollziehbar und wiederverwendbar erstellen und anpassen.
Terraform ist ein leistungsstarkes Tool für die Verwaltung von Infrastructure as Code. Es eignet sich sowohl für Unternehmen, die gerade erst mit der Cloud beginnen, als auch für solche, die bereits Cloud-Anbieter nutzen.
Terraform kann eine Vielzahl von Ressourcen verwalten. In den meisten Fällen können Sie jede Software, die Ihr Unternehmen nutzt, mit Terraform managen, wie beispielsweise GitHub-Konfigurationen oder Ihre PostgreSQL-Datenbank.
Es ist wichtig, die Vor- und Nachteile sowie die Bereitstellung eines Servers mit Terraform zu verstehen, damit Sie eine fundierte Entscheidung darüber treffen können, ob Terraform für Ihr Unternehmen geeignet ist.
Nachteile
Mit Terraform sind Aktualisierungen der verwalteten Ressourcen nicht so schnell wie bei einer manuellen Aktualisierung. Wenn Ihr Unternehmen regelmäßige sofortige Aktualisierungen benötigt, wird Terraform diese sicherlich verlangsamen.
Die Arbeit mit Terraform kann schwierig sein, wenn Sie verwaltete Ressourcen häufig manuell aktualisieren, da Sie diese Aktualisierungen auch in den Terraform-Konfigurationsdateien vornehmen müssen. Sie müssen eine Terraform-Aktualisierung durchführen, um den Status der verwalteten Ressourcen zu aktualisieren.
Diese erhöhte Komplexität sollte berücksichtigt werden. In einfacheren Infrastrukturen kann sich die Doppelarbeit als unhaltbar erweisen, da die Konfiguration von Terraform möglicherweise länger dauert als die manuelle Bereitstellung der Ressourcen.
Vorteile
Wenn Sie Ressourcen in Terraform-Code gespeichert haben, der in der Versionskontrolle liegt, wird automatisch ein Änderungsprotokoll aller Infrastruktur-Updates erstellt. Wenn ein Terraform-Update fehlerhaft ist, können Sie die letzten Änderungen mithilfe des Versionskontrollsystems rückgängig machen und die zuvor funktionierende Terraform-Konfiguration erneut anwenden. Fehler, die durch menschliches Versagen entstehen können, sind viel weniger wahrscheinlich, wenn Änderungen in Code geschrieben werden und Teams sie vor der Anwendung überprüfen können.
Ein weiterer Vorteil von Terraform ist die einfache Bereitstellung neuer Dienste. Mit Terraform lassen sich neue Dienste einfach ändern oder bereitstellen, da Sie den Code bestehender Dienste wiederverwenden können.
So verwenden Sie Terraform zum Bereitstellen eines Servers
Terraform verwendet Dateien, die in der HashiCorp-Konfigurationssprache geschrieben sind, um Cloud-Ressourcen zu verwalten. Terraform verwendet TF-Dateien, die in der Regel projektübergreifend einer ähnlichen Namenskonvention folgen. Eine main.tf-Datei enthält die Konfiguration der von Terraform verwalteten Ressourcen. Eine providers.tf-Datei enthält Definitionen, die es Terraform ermöglichen, eine Verbindung zu den Anbietern der verwalteten Ressourcen herzustellen.
Wenn Sie beispielsweise Terraform zur Verwaltung von Ressourcen auf AWS verwenden, enthält die provider.tf-Datei einen AWS-Anbieterblock. Dieser legt Optionen für die Verwendung des Anbieters fest, zum Beispiel die Region, in der die Ressourcen bereitgestellt werden sollen.
Verwenden Sie eine variables.tf-Datei, um Variablen zu definieren und flexiblere Konfigurationen zu erstellen. Diese Variablen werden dann von Ressourcen referenziert und können während der Ausführung von Terraform über verschiedene Methoden bereitgestellt werden. Eine Datei output.tf enthält Verweise auf Ressourcenwerte, die nach erfolgreicher Ausführung von Terraform zurückgegeben werden. Die Namen der Dateien in Terraform-Projekten dürfen nicht mit den zurückgegebenen Dateien übereinstimmen, obwohl dies ein allgemein akzeptierter Standard ist und die meisten Terraform-Projekte diesem Muster folgen.
So sieht eine Terraform-Datei zum Bereitstellen eines Ubuntu-Servers aus.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
# Aktuellstes Ubuntu 22.04 AMI abrufen
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"]
}
owners = ["099720109477"] # Canonical
}
# Security Group für HTTP und SSH
resource "aws_security_group" "web_sg" {
name_prefix = "web-server-sg-"
description = "Erlaubt HTTP (80) und SSH (22) Verkehr"
ingress {
description = "HTTP von überall"
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
description = "SSH von überall (optional: auf eigene IP einschränken)"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = "WebServerSecurityGroup"
}
}
# EC2-Instanz erstellen
resource "aws_instance" "example" {
ami = data.aws_ami.ubuntu.id
instance_type = "t3.micro"
key_name = "mein-keypair"
vpc_security_group_ids = [aws_security_group.web_sg.id]
user_data = <<-EOF
#!/bin/bash
apt-get update -y
apt-get upgrade -y
apt-get install -y nginx
systemctl start nginx
systemctl enable nginx
EOF
tags = {
Name = "ExampleInstance"
}
}
# Öffentliche IP als Output
output "instance_public_ip" {
description = "Öffentliche IP-Adresse der EC2-Instanz"
value = aws_instance.example.public_ip
}
Für die Zwecke dieses Beispiels befinden sich der Ausgabeblock und der Anbieterblock in derselben Datei. Normalerweise würden diese in ihren eigenen Dateien output.tf und provider.tf gespeichert, was den Terraform Best Practices entspricht.
Der AWS-Provider-Block gibt an, dass AWS-Ressourcen verwendet werden und dass die Ressourcen in der Region us-east-1 bereitgestellt werden. Der aws_ami-Datenblock greift auf AWS zu und sucht die neuesten Amazon Machine Images (AMI) für die festgelegten Parameter. Die festgelegten Parameter geben ein Ubuntu-AMI zurück. Dabei handelt es sich um ein Image, das von AWS verwaltet wird und von Ubuntu für die Ausführung auf einem AWS-Server verwendet wird. Der nächste Block ist ein Datenblock, der die lokale IP-Adresse zurückgibt. Der Datenblock wird in der Sicherheitsgruppe verwendet, die unserer AWS-Instanz zugeordnet wird.
Ressourcenblock
Der erste Ressourcenblock ist für die Erstellung einer tatsächlichen Cloud-Ressource verantwortlich. In diesem Beispiel ist die Ressource aws_instance, die sich auf einen Server bezieht, der in AWS erstellt wird. Legen Sie die Sicherheitsgruppe der Instanz auf die ID von aws_security_group fest, das später in der Datei erstellt wird, indem Sie das Attribut vpc_security_group_ids von aws_instance verwenden.
Mit dem Attribut user_data können Sie ein Skript bereitstellen, das beim Start der Instanz ausgeführt wird. Das Skript installiert und führt Nginx aus. Nginx ist ein Webserver, der als Standardseite dient, auf der Sie sehen können, dass der Server ordnungsgemäß bereitgestellt wurde. Ein aws_security_group-Ressourcenblock gibt Eingangsregeln an, die nur Ihrer lokalen IP den Zugriff auf den Server über HTTP und SSH erlauben. Die Ausgangsregel erlaubt dem Server uneingeschränkten Zugriff auf das externe Netzwerk. Schließlich gibt der Ausgabeblock mit dem Namen instance_public_id die öffentliche IP-Adresse der zuvor in der Datei angegebenen aws_instance-Ressource zurück.
Um die Ressourcen bereitzustellen, stellen Sie sicher, dass Terraform installiert ist, und führen Sie den Befehl terraform apply aus. HashiCorp bietet Anweisungen zur Installation von Terraform. Stellen Sie sicher, dass Sie die Voraussetzungen für die Bereitstellung von Ressourcen mit AWS erfüllen.
Wenn Sie den Befehl apply ausführen, zeigt Terraform die Ressourcen an, die erstellt werden sollen. Von dort aus wird die Ausführung des Befehls apply entweder bestätigt oder abgebrochen. Wenn Sie den Befehl terraform apply ausführen, sieht das Ergebnis wie im folgenden Beispiel aus.

Nachdem Sie yes eingegeben haben, erstellt Terraform die Ressourcen und gibt den Fortschritt jeder Ressource aus.

Terraform gibt auch die Ausgaben zurück, in denen Sie die öffentliche IP-Adresse der von Terraform erstellten Instanz finden. Wenn Sie diese Instanz aufrufen, sehen Sie die Standardseite von Nginx, die anzeigt, dass der Server ordnungsgemäß bereitgestellt wurde.

Um die Ressourcen zu entfernen, führen Sie den Befehl aus und bestätigen Sie, dass die Ressourcen gelöscht werden sollen.
Infrastrukturautomatisierung mit Terraform
Terraform ist ein Tool für Infrastructure as Code und ermöglicht es, Cloud-Ressourcen wie Server, Datenbanken oder GitHub-Konfigurationen deklarativ zu verwalten. Änderungen werden im Code versioniert, was Transparenz und Nachvollziehbarkeit schafft. Neue Dienste lassen sich schnell bereitstellen und wiederverwenden. Nachteile sind ein höherer Aufwand bei häufigen manuellen Änderungen und langsamere Aktualisierungen. Terraform nutzt Konfigurationsdateien, um Ressourcen automatisch zu erstellen, anzupassen oder zu löschen.