Vultr API mit Python: Der ultimative Guide zur Automatisierung
Hier ist ein umfassendes Tutorial, wie du die Vultr-API mit Python nutzt, um deine Cloud-Infrastruktur zu automatisieren.
Die Automatisierung von Cloud-Servern (Instanzen) ermöglicht es Entwicklern, Infrastruktur innerhalb von Sekunden zu skalieren, Backups zu verwalten und Deployments zu vereinfachen. Vultr bietet hierfür eine leistungsstarke REST-API an.
1. Voraussetzungen
Bevor wir starten, stelle sicher, dass du Folgendes hast:
- Vultr-Account: Falls du keinen hast, erstelle einen auf vultr.com.
- API Key: Gehe im Vultr-Dashboard zu Account -> API.
- Aktiviere den API-Zugriff.
- Wichtig: Kopiere den API-Key.
- Sicherheit: Erlaube unter "Access Control" entweder deine IP-Adresse oder wähle "Allow All IPv4" (letzteres ist bequemer für den Start, aber weniger sicher).
- Python installiert: Version 3.6 oder höher.
2. Installation der Bibliothek
Vultr bietet ein offizielles Python-SDK an, das die Arbeit mit der API erheblich vereinfacht.
Öffne dein Terminal und installiere es via pip:
pip install vultr-python
Zusätzlich empfehlen wir python-dotenv, um deinen API-Key sicher zu speichern:
pip install python-dotenv
3. Grundkonfiguration
Erstelle einen Projektordner und darin eine Datei namens .env. Speichere dort deinen API-Key:
Datei: .env
VULTR_API_KEY=DEIN_API_KEY_HIER
Erstelle nun deine Hauptdatei vultr_automation.py.
4. Instanzen auflisten (GET-Request)
Zuerst prüfen wir, ob die Verbindung funktioniert, indem wir alle vorhandenen Instanzen abrufen.
import os
from vultr import VultrV2
from dotenv import load_dotenv
# API Key laden
load_dotenv()
api_key = os.getenv('VULTR_API_KEY')
# SDK initialisieren
vultr = VultrV2(api_key)
def list_instances():
instances = vultr.instances.list()
print("Deine Vultr Instanzen:")
for inst in instances['instances']:
print(f"ID: {inst['id']} | Name: {inst['label']} | Status: {inst['status']} | IP: {inst['main_ip']}")
if __name__ == "__main__":
list_instances()
5. Eine neue Instanz erstellen (POST-Request)
Um eine Instanz zu erstellen, benötigst du IDs für die Region, den Plan (Hardware) und das Betriebssystem (OS).
Hier ist ein Skript, das einen kleinen Server in Frankfurt mit Ubuntu erstellt:
def create_instance():
# Beispiel-IDs:
# Region: 'fra' (Frankfurt)
# Plan: 'vc2-1c-1gb' (Cloud Compute: 1 vCPU, 1GB RAM)
# OS: 413 (Ubuntu 22.04 LTS)
params = {
"region": "fra",
"plan": "vc2-1c-1gb",
"os_id": 413,
"label": "Auto-Python-Server",
"hostname": "python-bot"
}
new_inst = vultr.instances.create(**params)
print(f"Instanz wird erstellt! ID: {new_inst['instance']['id']}")
# create_instance() # Zum Testen auskommentieren
Tipp: Du kannst die verfügbaren IDs über vultr.regions.list(), vultr.plans.list() und vultr.os.list() abrufen.
6. Automatisierung: Instanz stoppen oder löschen
Ein großer Vorteil der Automatisierung ist das Löschen von Ressourcen, wenn sie nicht mehr benötigt werden, um Kosten zu sparen.
def delete_instance(instance_id):
vultr.instances.delete(instance_id)
print(f"Instanz {instance_id} wurde gelöscht.")
def halt_instance(instance_id):
vultr.instances.halt(instance_id)
print(f"Instanz {instance_id} wurde gestoppt.")
7. Ein komplettes Beispiel: "Create & Wait"
In der Praxis möchte man oft eine Instanz erstellen und warten, bis sie bereit ist, um z.B. die IP-Adresse für ein Deployment zu erhalten.
import time
def deploy_and_get_ip():
# 1. Erstellen
res = vultr.instances.create(region="fra", plan="vc2-1c-1gb", os_id=413, label="Deploy-Test")
inst_id = res['instance']['id']
print(f"Server {inst_id} wird gestartet...")
# 2. Warten bis IP zugewiesen wurde
while True:
info = vultr.instances.get(inst_id)
status = info['instance']['status']
ip = info['instance']['main_ip']
if ip != "0.0.0.0" and status == "active":
print(f"Server ist bereit! IP-Adresse: {ip}")
break
print("Warten auf IP-Zuweisung...")
time.sleep(10)
# deploy_and_get_ip()
8. Best Practices für die Automatisierung
- Rate Limiting: Die Vultr API hat Limits (Anfragen pro Sekunde). Wenn du Massenoperationen durchführst, baue
time.sleep()ein. - Fehlerbehandlung: Nutze
try-exceptBlöcke, um Netzwerkfehler oder ungültige API-Anfragen abzufangen. - SSH-Keys: Nutze beim Erstellen von Instanzen den Parameter
sshkey_id, damit du dich sofort ohne Passwort einloggen kannst. - Sicherheit: Veröffentliche niemals deine
.envDatei auf GitHub (füge sie zur.gitignorehinzu).
Fazit
Mit nur wenigen Zeilen Python kannst du deine gesamte Cloud-Infrastruktur bei Vultr steuern. Das offizielle SDK nimmt dir dabei die mühsame Arbeit mit rohen HTTP-Requests ab. Von hier aus kannst du komplexere Skripte bauen, die z.B. Snapshots erstellen, DNS-Einträge aktualisieren oder Load Balancer konfigurieren.
Nützliche Links: