Tutorial: Terraform zur Openstack-Verwaltung installieren & nutzen
Diese Seite befindet sich derzeit in Bearbeitung.
Terraform zur Openstack-Verwaltung installieren & nutzen
Terraform ist ein leistungsstarkes Tool zur Infrastrukturautomatisierung, das es ermöglicht, Ressourcen in der Cloud deklarativ zu erstellen, zu verwalten und zu organisieren. In Kombination mit OpenStack bietet Terraform eine Möglichkeit, eine eigene Cloud-Umgebung effizient zu verwalten. In diesem Artikel zeigen wir, wie Sie Terraform mit OpenStack konfigurieren und nutzen können.
Falls Sie zusätzlich die Openstack CLI verwenden möchten, haben wir hierzu auch ein Tutorial.
Voraussetzungen
Um Terraform in Verbindung mit OpenStack zu nutzen, sollten folgende Voraussetzungen erfüllt sein:
- Zugriff auf unsere OpenStack-Umgebung (af.stack).
- Ein Server oder lokaler Rechner mit Linux, macOS oder Windows.
- Terraform installiert.
- Hinweise zur Installation finden Sie in der offiziellen Terraform-Dokumentation.
Schritt 1: API Zugang aktivieren
Um den API Zugang zu aktivieren, müssen Sie ein Passwort für diesen anlegen.
- Ihr API-Username.
- Ihr API-Passwort.
- Ihre Konfigurationsdatei, um auf die API zuzugreifen.
- Hiermit aktivieren Sie den API-Zugang.
Schritt 2: Terraform konfigurieren
Hauptkonfigurationsdatei erstellen
Erstellen Sie eine Datei namens main.tf
mit folgendem Inhalt:
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.53.0"
}
}
}
provider "openstack" {
user_name = "API-Benutzername"
password = "PasswortAPI-User"
auth_url = "https://api.afstack.io:5000/v3"
region = "RegionOne"
}
resource "openstack_compute_instance_v2" "Beispielname" {
name = "Beispielname"
image_name = "Ubuntu 20.04"
flavor_name = "a1.xs"
key_pair = "deinSSHKey"
network {
name = "Netzwerkname"
}
}
Erläuterung der Konfiguration
terraform
: Gibt die erforderliche Terraform-Version sowie das Provider-Plugin an.provider "openstack"
: Hier werden die Verbindungsdetails für Ihre OpenStack-Umgebung angegeben:auth_url
: Die Authentifizierungs-URL Ihres OpenStack-Anbieters.region
: Region der Cloud-Ressourcen.user_name
,password
: Ihre Zugangsdaten.
resource "openstack_compute_instance_v2"
: Definiert die zu erstellende Instanz:name
: Der Name der Instanz.image_name
: Das Betriebssystem-Image.flavor_name
: Das Flavor, welches die .key_pair
: Ein SSH-Schlüsselpaar für den Zugriff.network
: Das Netzwerk, mit dem die Instanz verbunden wird.
Das Anlegen von 2 Beispielinstanzen wird unten bei den Beispielen genauer erklärt.
Schritt 3: Terraform ausführen
- Initialisierung: Terraform muss das Provider-Plugin herunterladen. Führen Sie dazu den folgenden Befehl aus:
terraform init
- Konfiguration validieren: Stellen Sie sicher, dass Ihre Konfiguration keine Fehler enthält:
terraform validate
- Test: Testen Sie Ihre Konfig hiermit, um zu sehen, welche Ressourcen genau erstellt und/oder gelöscht werden. Hierbei wird noch nichts angewendet:
terraform plan
- Ressourcen anwenden: Hiermit werden die Ressourcen in der Openstack-Umgebung verteilt:
terraform apply
- Verifikation: Überprüfen Sie, ob die Ressourcen erfolgreich erstellt wurden. Sie können dazu entweder die OpenStack-CLI oder das OpenStack-Dashboard verwenden.
Schritt 4: Ressourcen verwalten und löschen
Terraform bietet Funktionen, um Ressourcen zu ändern oder zu löschen:
- Änderungen anwenden: Passen Sie Ihre main.tf-Datei an und führen Sie erneut terraform apply aus.
- Ressourcen löschen: Der Befehl terraform destroy entfernt alle Ressourcen, die in der Konfiguration definiert sind.
Beispiele für Terraform-Konfigurationen
Beispiel: Datenbankserver & Webserver
Die folgende Konfiguration erstellt zwei OpenStack-Instanzen. Die erste Instanz ist ein Datenbankserver, der nur über das interne Netz erreichbar ist. Die zweite Instanz ist ein Webserver, der per HTTP/HTTPS erreichbar ist.
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.53.0"
}
}
}
provider "openstack" {
user_name = "API-Username"
password = "Passwort"
auth_url = "https://api.afstack.io:5000/v3"
region = "RegionOne"
}
# Datenbankserver
resource "openstack_blockstorage_volume_v3" "example_volume" {
name = "example-volume"
size = 20
image_id = "331de7a6-d4fc-4df5-8650-966dde64dacc"
}
resource "openstack_networking_network_v2" "internal_network" {
name = "internal_network"
admin_state_up = "true"
}
resource "openstack_compute_keypair_v2" "provisioning-key" {
name = "provisioning-key"
}
resource "openstack_networking_subnet_v2" "internal_subnet" {
network_id = "${openstack_networking_network_v2.internal_network.id}"
cidr = "192.168.0.0/24"
enable_dhcp = "false"
no_gateway = "true"
}
resource "openstack_compute_instance_v2" "my_instance" {
name = "my_instance"
image_name = "Ubuntu 20.04 LTS (20240821)"
flavor_name = "a1.xs"
key_pair = "provisioning-key"
block_device {
uuid = openstack_blockstorage_volume_v3.example_volume.id
source_type = "volume"
destination_type = "volume"
boot_index = 0
delete_on_termination = true
}
network {
name = "internal_network"
}
}
resource "openstack_compute_floatingip_v2" "floatip_1" {
pool = "af-external-customer"
}
resource "openstack_compute_floatingip_associate_v2" "floatip_1" {
floating_ip = "${openstack_compute_floatingip_v2.floatip_1.address}"
instance_id = "${openstack_compute_instance_v2.my_instance.id}"
}
# Webserver
resource "openstack_blockstorage_volume_v3" "example_volume1" {
name = "example-volume1"
size = 20
image_id = "331de7a6-d4fc-4df5-8650-966dde64dacc"
}
resource "openstack_compute_keypair_v2" "provisioning-key1" {
name = "provisioning-key1"
}
resource "openstack_compute_instance_v2" "my_instance1" {
name = "my_instance1"
image_name = "Ubuntu 20.04 LTS (20240821)"
flavor_name = "a1.xs"
key_pair = "provisioning-key1"
block_device {
uuid = openstack_blockstorage_volume_v3.example_volume1.id
source_type = "volume"
destination_type = "volume"
boot_index = 0
delete_on_termination = true
}
network {
name = "shared-public-network"
}
network {
name = "internal_network"
}
}
resource "openstack_compute_floatingip_v2" "floatip_11" {
pool = "af-external-customer"
}
resource "openstack_compute_floatingip_associate_v2" "floatip_11" {
floating_ip = "${openstack_compute_floatingip_v2.floatip_11.address}"
instance_id = "${openstack_compute_instance_v2.my_instance1.id}"
}