Auf der Microsoft Messe Ignite 2021 wurde die Preview von Azure Container Apps vorgestellt. Dieser Service ermöglicht es auf einfachste Weise containerisierte Anwendungen bereitzustellen, vor allem für Mikroservices, die mit der Distributed Application Runtime (DAPR) arbeiten. In diesem Blog Post wird der Service vorgestellt und anschließend mit seinen Azure Alternativen verglichen.
Was sind Azure Container Apps?
Zur Orchestrierung von containerisierten Anwendungen hat sich in der Zwischenzeit Kubernetes als Standard etabliert. Der Nachteil an Kubernetes ist jedoch die hohe Komplexität, auch wenn ein Managed Kubernetes Service wie zum Beispiel Azure Kubernetes Service verwendet wird. Dies führt vor allem in kleineren Teams zu Problemen, da sich oft nur ein Entwickler mit der Konfiguration auskennt oder der Kubernetes Cluster zu Projektbeginn einmal konfiguriert wird und dann das Wissen darüber in Vergessenheit gerät. Außerdem ist der initiale Aufwand hoch.
Diese Probleme soll Azure Container Apps beheben. Der Service baut intern auf Kubernetes auf, versteckt dieses aber hinter einer Abstraktion. Zugriff auf den Kubernetes Cluster ist nicht möglich, es werden aber auch keine Kubernetes Kenntnisse benötigt, um Azure Container Apps zu verwenden.
Eine Container App entspricht einem Mikroservice und besteht aus einem oder mehreren Containern. Jede App mit ihren beliebig vielen Containern läuft auf einer virtuellen Maschine. In den meisten Fällen besteht eine Container App nur aus einem Container. Ein zweiter Hilfscontainer kann als Reverse Proxy oder zum Monitoring eingesetzt werden. Anstatt mehrere Container in einer Container App zu hosten sollten diese in unterschiedliche Container Apps aufgeteilt werden, sodass diese unabhängig skalieren.
Jedes Mal, wenn eine Container App aktualisiert wird entsteht eine neue Revision. Das Besondere dabei ist, dass die alte Revision nicht automatisch deaktiviert wird, sondern mehrere Revisionen gleichzeitig aktiv sind. Für jede Revision wird ausgewählt wie viel Prozent der Requests diese erhalten soll. So können A / B Tests durchgeführt werden oder neue Versionen stufenweise ausgerollt werden.
Mehrere Container Apps werden immer zu einem Container App Environment zusammengeschlossen. Dieses Environment ist mit einem Log Analytics Workspace verbunden. Die Nachrichten, die in den einzelnen Apps im Standardoutput ankommen werden mit Metadaten versehen und an den Log Analytics Workspace weitergeleitet und können dort analysiert werden. Eine Übersicht wie diese unterschiedlichen Ebenen zusammenspielen ist in der folgenden Grafik zu sehen.
Das Container App Environment hat aber noch einen zweiten Zweck. Alle Apps innerhalb eines Environments teilen sich ein privates Netzwerk. Für jede App lassen sich die Regeln für eingehenden Traffic einstellen. Dabei kann die App von überall oder nur von anderen Apps im gleichen Environment oder überhaupt nicht erreichbar sein.
Eine Stärke von Container Apps ist die Möglichkeit Kubernetes Event-drive Autoscaling (KEDA) einzusetzten, um Apps automatisch horizontal zu skalieren. Dadurch ist es möglich auf 0 Instanzen zu skalieren, sodass keine Kosten entstehen. KEDA Scalers unterstützt verschiedene Trigger wie zum Beispiel: Auslastung der CPU, Fülle des Arbeitsspeichers, Anzahl an parallelen HTTP Requests oder anhand der Anzahl an Nachrichten in einer Service Bus Queue.
Vergleich zu anderen Azure Services
Werden Features wie der integrierte Load Balancer, Skalierung, Revisionsmanagement oder die DAPR Integration nicht benötigt können auch Azure Container Instances verwendet werden.
Azure Kubernetes Service ist die passende Alternative, falls mehr Features benötigt werden. Es bietet sich an zu Beginn eines Projekts mit Azure Container Apps zu starten, um schnell erste Services bereitzustellen. Falls das Projekt wächst und mehr Kontrolle über die Services benötigt wird, ist ein Wechsel zu Azure Kubernetes Service möglich ohne dass die Container / Mikroservices angepasst werden müssen.
Azure App Service ist der de facto Standard zum Bereitstellen von Webanwendungen unter Azure. Der Service ist ausgereift und stellt eine große Breite an Funktionen zur Verfügung. Ähnlich wie mit Azure Container Apps kann auch ein Azure App Service einfach und unkompliziert eingerichtet werden. Gründe warum man trotzdem Azure Container Apps einsetzten sollte sind die DAPR Integration und die besseren Skalierungsmöglichkeiten. Während App Service primär für Webanwendungen gedacht ist, können mit Container Apps auch Hintergrundprozesse oder Eventbasierte Verarbeitung elegant abgebildet werden.
Fazit
Bevor Sie nun allerdings Ihre Anwendung auf Azure Container Apps umstellen, sei hier nochmals darauf hingewiesen, dass es sich um eine Preview handelt. Dies wird auch in der teilweise lückenhaften Dokumentation und an den überschaubaren Konfigurationsmöglichkeiten klar. Außerdem ist Azure Container Apps keine Weltneuheit. Andere Plattformen wie Amazon Web Services, Google Cloud Platform oder auch Heroku bieten ähnliche Lösungen für containerisierte Anwendungen die fully managed und serverless sind. Falls Sie aber eine schnelle und unkomplizierte Lösung suchen ihre Container bereitzustellen ist Azure Container Apps auf jeden Fall einen Blick wert. Positiv hervorzuheben sind vor allem die Skalierungsmöglichkeiten mit KEDA und die DAPR Integration.