Infrastructure as Code (IaC) Konfigurationsleitfaden
Infrastructure as Code (IaC) hat die Art und Weise, wie wir IT-Ressourcen verwalten und bereitstellen, revolutioniert. Anstatt manueller Konfigurationen verwenden wir Code, um unsere Umgebung zu definieren, was Konsistenz, Skalierbarkeit und Reproduzierbarkeit gewährleistet. Dieser Leitfaden bietet wichtige Vorlagen für die beliebtesten IaC-Tools: Terraform, Ansible, Vagrant und Pulumi.
1. Terraform Konfigurationsvorlagen
Terraform ist der Industriestandard für das Provisioning von Cloud-Infrastruktur. Es verwendet HCL (HashiCorp Configuration Language), um Ressourcen zu definieren.
Terraform main.tf Vorlage
In der Datei main.tf definieren Sie Ihre primären Ressourcen. Eine typische terraform main.tf template enthält Ressourcenblöcke für Instanzen, Netzwerke und Speicher.
# Beispiel für eine terraform main.tf Vorlage
resource "aws_instance" "web_server" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "Web-Server-01"
}
}
resource "aws_vpc" "main_vpc" {
cidr_block = "10.0.0.0/16"
}
Terraform Provider Konfiguration (Provider Config)
Der Block terraform provider config teilt Terraform mit, welchen Cloud-Anbieter (AWS, Azure, GCP usw.) es verwenden soll und wie die Authentifizierung erfolgt.
# terraform provider config
provider "aws" {
region = "eu-central-1"
# Die Authentifizierung erfolgt normalerweise über Umgebungsvariablen oder AWS CLI-Profile
}
provider "google" {
project = "mein-projekt-id"
region = "europe-west3"
}
Terraform Backend Konfiguration
Die terraform backend config legt fest, wo Terraform seine Zustandsdatei (state file) speichert. Die Verwendung eines Remote-Backends wie S3 oder GCS ist für die Zusammenarbeit im Team entscheidend.
# terraform backend config
terraform {
backend "s3" {
bucket = "mein-terraform-state-bucket"
key = "prod/terraform.tfstate"
region = "eu-central-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
2. Ansible Playbooks und Inventar
Während Terraform die Infrastruktur bereitstellt, ist Ansible spezialisiert auf Konfigurationsmanagement und Anwendungs-Deployment.
Ansible Playbook Vorlage
Eine ansible playbook template definiert die Aufgaben, die auf einer Gruppe von Hosts ausgeführt werden sollen.
---
# ansible playbook vorlage
- name: Webserver konfigurieren
hosts: webservers
become: yes
tasks:
- name: Sicherstellen, dass Apache installiert ist
apt:
name: apache2
state: present
- name: Apache-Dienst starten
service:
name: apache2
state: started
enabled: yes
- name: index.html kopieren
copy:
src: files/index.html
dest: /var/www/html/index.html
Ansible Inventardatei
Die ansible inventory file listet die Hosts und Hostgruppen auf, die von Ansible verwaltet werden.
# ansible inventardatei (INI-Format)
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
db.example.com ansible_user=admin
[all:vars]
ansible_python_interpreter=/usr/bin/python3
3. Vagrant und Pulumi Konfiguration
Für die lokale Entwicklung und modernes programmatisches IaC sind Vagrant und Pulumi unerlässlich.
Vagrantfile Vorlage und Beispiel
Ein Vagrantfile template wird verwendet, um virtuelle Entwicklungsumgebungen zu definieren und zu konfigurieren.
# Vagrantfile Beispiel
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
Pulumi Konfiguration (Pulumi Config)
Pulumi config ermöglicht es Ihnen, Infrastruktur mit vertrauten Programmiersprachen wie TypeScript, Python oder Go zu verwalten.
// Pulumi Konfigurationsbeispiel (TypeScript)
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const size = "t2.micro";
const ami = aws.ec2.getAmi({
filters: [{ name: "name", values: ["amzn-ami-hvm-*"] }],
owners: ["137112412989"], // Owner-ID für Amazon Linux
mostRecent: true,
}).then(ami => ami.id);
const server = new aws.ec2.Instance("web-server", {
instanceType: size,
ami: ami,
});
export const publicIp = server.publicIp;
4. Häufig gestellte Fragen (FAQ)
F: Warum erhalte ich in Terraform den Fehler "provider configuration not found"?
A: Dies passiert normalerweise, wenn Sie nach dem Hinzufügen eines neuen Providers nicht terraform init ausgeführt haben oder wenn der Provider-Block in Ihren .tf-Dateien fehlt. Stellen Sie sicher, dass Sie den Block required_providers verwenden, wenn Sie spezifische Versionen benötigen.
F: Wie behebe ich "ansible unreachable"-Fehler?
A: Überprüfen Sie Ihre ansible inventory file, um sicherzustellen, dass die IP-Adressen/Hostnamen korrekt sind. Überprüfen Sie die SSH-Konnektivität manuell und stellen Sie sicher, dass Ihr SSH-Schlüssel zum Agenten hinzugefügt oder im Inventar angegeben wurde.
F: Was ist der Unterschied zwischen Terraform und Pulumi?
A: Terraform verwendet HCL, eine domänenspezifische Sprache, während Pulumi Standardprogrammiersprachen verwendet. Pulumi bietet mehr Flexibilität für komplexe Logik, aber Terraform hat ein größeres Ökosystem und eine größere Community.
F: Wann sollte ich Vagrant verwenden?
A: Verwenden Sie Vagrant, wenn Sie eine konsistente, reproduzierbare lokale Entwicklungsumgebung benötigen, die Ihr Produktions-Setup nachahmt (z. B. durch die Verwendung von VMs auf Ihrem Laptop).
Fazit
Das Beherrschen von IaC-Konfigurationsvorlagen ist der Schlüssel zum Aufbau moderner, resilienter Infrastrukturen. Egal, ob Sie Terraform für das Provisioning, Ansible für die Konfiguration oder Pulumi für das code-gesteuerte Cloud-Management verwenden – diese Vorlagen bieten einen soliden Ausgangspunkt für Ihre DevOps-Reise.
Benötigen Sie Hilfe beim Formatieren Ihrer JSON- oder YAML-Dateien? Besuchen Sie Tool3M für eine Sammlung leistungsstarker Entwickler-Tools.