Entwicklung einer Open-Source- und plattformübergreifenden Azure CLI mit Python
Hintergrund
Microsoft Azure ist eine Cloud-Computing-Plattform, die sich über fünfzig Rechenzentren weltweit erstreckt und Hunderte von Diensten anbietet. Als großer Cloud-Dienst ist es für Kunden sehr wichtig, die besten Werkzeuge für die Bereitstellung und Verwaltung ihrer Systeme zu haben.
Seit Anbeginn bieten wir eine Vielzahl von Werkzeugen und Bibliotheken für Entwickler, Administratoren und Architekten an, um alle Arten von Aktionen durchzuführen: vom Hochfahren von virtuellen Maschinen in virtuellen Netzwerken bis hin zur Bereitstellung von Web-Apps mit PostgreSQL-Datenbanken. Eines der beliebtesten Werkzeuge ist natürlich die Azure „az“ Kommandozeilenschnittstelle. Um dieses Open-Source-Tool zu entwickeln, das Tausende von Befehlen sowie Erweiterungen von Drittanbietern umfasst, haben wir uns für Python entschieden.

Warum Python
Anfangs war das Azure-Kommandozeilenerlebnis als PowerShell-Modul für Windows-Benutzer und als Node.js-basierte CLI für alle anderen verfügbar, einschließlich Benutzer, die mit macOS und Linux arbeiten. Das erhebliche Wachstum führte jedoch zu einer technischen Komplexität, die nur schwer zu lösen war.
Der Wechsel zu Python ermöglichte es uns, eine einzige Implementierung zu erstellen, die auf allen Plattformen gleich funktioniert. Jeder Befehl ist ein Wrapper um eine oder mehrere Funktionen des Azure SDK für Python, was sicherstellt, dass Entwickler Skripte mit identischer Funktionalität erstellen können. Und konsistente Konventionen für die Befehlszeile ermöglichen es uns, einen Satz von Anweisungen für alle Benutzer bereitzustellen.
Da Python einfach für alle unsere Plattformen zu verteilen ist, können wir plattformspezifische Pakete bereitstellen, die den richtigen Konventionen entsprechen. Unter Windows können Sie einen regulären Installer verwenden, der alle notwendigen Komponenten enthält. Unter Linux bieten wir Pakete in unseren Repositories für viele Distributionen an, sodass Benutzer beispielsweise unter Ubuntu apt-get verwenden können; und unter macOS empfehlen wir Homebrew. Die Einhaltung plattformspezifischer Konventionen gibt unseren Benutzern Vertrauen in die Vertrauenswürdigkeit der Software, und Python bietet die Flexibilität, dies zu ermöglichen.
Funktionen der Azure CLI
Dank der Flexibilität von Python und des leistungsstarken Ökosystems von Paketen unterstützt die Azure CLI Funktionen wie Autovervollständigung (in Shells, die dies unterstützen), persistente Anmeldeinformationen, JMESPath-Ergebnisverarbeitung, lazy-Initialisierung, netzwerklose Unit-Tests und mehr.
Ein Großteil dieser Unterstützung wurde in ein Open-Source-Paket namens Knack abstrahiert, das es uns oder anderen ermöglicht, es für eigene Kommandozeilentools zu verwenden.
Speziell für die Azure CLI haben wir Erweiterungen aktiviert, die mit pip installiert werden können, um die Entwicklung komplexerer Tools zu ermöglichen, wie z. B. den Selbstzerstörungsmodus, der es ermöglicht, jede Ressource nach einer bestimmten Zeit mithilfe eines einfachen Kommandozeilenarguments automatisch zu löschen. Ein Ökosystem von Erweiterungen ermöglicht es unseren Benutzern, Workflows zu entwickeln, die ihren Präferenzen entsprechen.
Da Azure mehrere API-Versionen gleichzeitig unterstützt, ebenso wie On-Premises-Azure-Stack-Bereitstellungen, muss die Azure CLI ihre Befehle an die jeweils verbundene Version anpassen können. Dank der komponierbaren Architektur des Tools in Python können wir zur Laufzeit einfach Befehle hinzufügen oder entfernen, je nach Verfügbarkeit. Das Ergebnis ist, dass Benutzern keine ungültigen Befehle oder Argumente vorgeschlagen werden und sie das Kommandozeilentool frei aktualisieren können, auch wenn sie mit älteren Bereitstellungen arbeiten.
Schlussfolgerung
Microsoft Azure bietet Hunderte von Diensten an, von denen jeder mehrere Kompatibilitätsversionen und viele Befehle bietet. Diese Komplexität über ein reaktionsschnelles, hilfreiches und einfach zu bedienendes Kommandozeilentool darzustellen, ist eine Herausforderung.
Die Entwicklung der Azure CLI in Python ermöglichte es uns, ein Tool zu entwickeln, das auf allen Plattformen nativ aussieht und sich auch so anfühlt, überall konsistent läuft, für die interaktive Nutzung gut genug leistet, eine leistungsstarke Erweiterbarkeit unterstützt und unseren Kunden hilft, unabhängig von ihren Zielen erfolgreich zu sein.
