Vultr API mit Python: Der ultimative Guide zur Automatisierung

Melden

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:

  1. Vultr-Account: Falls du keinen hast, erstelle einen auf vultr.com.
  2. 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).
  3. 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

  1. Rate Limiting: Die Vultr API hat Limits (Anfragen pro Sekunde). Wenn du Massenoperationen durchführst, baue time.sleep() ein.
  2. Fehlerbehandlung: Nutze try-except Blöcke, um Netzwerkfehler oder ungültige API-Anfragen abzufangen.
  3. SSH-Keys: Nutze beim Erstellen von Instanzen den Parameter sshkey_id, damit du dich sofort ohne Passwort einloggen kannst.
  4. Sicherheit: Veröffentliche niemals deine .env Datei auf GitHub (füge sie zur .gitignore hinzu).

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:

0