Azure Container Apps (ACA) ist eine vollständig verwaltete, serverlose Containerplattform auf Microsoft Azure, die die Komplexität der Kubernetes-Orchestrierung abstrahiert und gleichzeitig leistungsstarke Skalierung, ereignisgesteuerte Funktionen und integrierte Anwendungsmuster bietet. Es ist für die moderne Anwendungsentwicklung konzipiert, bei der Teams Microservices, Hintergrundjobs und API-Endpunkte bereitstellen müssen, ohne virtuelle Maschinen, Cluster oder Orchestratoren bereitzustellen oder zu verwalten. Durch die Kombination der Flexibilität von Containern mit serverloser Einfachheit ermöglicht ACA Entwicklern, sich auf Code und Geschäftslogik zu konzentrieren, während Azure die zugrunde liegende Infrastruktur, Skalierung und Sicherheit übernimmt.

Was sind Azure Container Apps?

Azure Container Apps arbeitet als verwaltete Umgebung für die Ausführung containerisierter Workloads zwischen Azure App Service (für Web-Apps) und Azure Kubernetes Service (AKS) (für vollständige Clustersteuerung). Es bietet eine vereinfachte Kubernetes-Erfahrung, ohne dass eine direkte Interaktion mit dem Cluster-API-Server erforderlich ist. ACA verwendet Kubernetes unter der Haube, abstrahiert jedoch seine operative Komplexität, wodurch es ideal für Teams ist, die Containervorteile - Portabilität, Konsistenz, Ressourcenisolierung - wünschen, ohne Knoten, Pods oder Load Balancer zu verwalten.

Jede Container App läuft in einer revisionsbasierten Umgebung, in der Sie mehrere Revisionen bereitstellen und die Datenaufteilung verwalten können. Die Plattform unterstützt ereignisgesteuerte Architekturen durch integrierte Integration mit KEDA (Kubernetes Event-Driven Autoscaling) und Dapr (Distributed Application Runtime) für die Erstellung belastbarer, microservices-basierter Anwendungen. Container Apps unterstützt auch die Skalierung auf Null, was bedeutet, dass Sie nur für Berechnungen bezahlen, wenn Anfragen aktiv sind - perfekt für sporadische Workloads, Hintergrundprozessoren oder Batch-Aufträge.

Kernmerkmale und -fähigkeiten

Serverlose Architektur und automatische Skalierung

Das serverlose Modell von ACA eliminiert die Notwendigkeit, VMs oder Clusterknoten bereitzustellen und zu verwalten. Die Plattform skaliert automatisch auf der Grundlage von HTTP-Datenverkehr, Ereignisauslösern (z. B. Warteschlangentiefe, Cron-Zeitpläne) oder benutzerdefinierten Metriken über KEDA-Skalierer. Die Skalierung kann pro Revision konfiguriert werden und Sie können die Anzahl der Min- und Max-Replikate definieren. Im Leerlauf kann eine Container-App auf Null Replikate skalieren, was Kosten und Ressourcen einspart.

Eingebaute Dapr-Unterstützung

Dapr bietet eine Reihe von Bausteinen (Staatsmanagement, Pub/Sub, Service-Invocation, Secrets, Bindings), die die Erstellung verteilter Anwendungen vereinfachen. ACA integriert Dapr auf Plattformebene, sodass Sie es per Container-App aktivieren können, ohne ein separates Sidecar oder eine Infrastruktur zu verwalten. Dies reduziert den Boilerplate-Code und beschleunigt die Entwicklung robuster Microservices.

Revisionsmanagement und Traffic Splitting

Container Apps verwendet ein Revisionsmodell ähnlich dem Azure App Service: Jede Code- oder Konfigurationsänderung erzeugt eine neue Revision, während alte Revisionen verfügbar bleiben. Sie können Traffic-Prozentsätze zwischen den Revisionen festlegen, um Blue-Green-Bereitstellungen, A/B-Tests oder gestaffelte Rollouts durchzuführen. Revisionen können aktiv, deaktiviert oder für Rollback verwendet werden, wodurch Sie eine feine Kontrolle über die Bereitstellungssicherheit haben.

Ingress und Custom Domains

Jede Container-App erhält einen eindeutigen HTTPS-Endpunkt (z. B. ). Sie können benutzerdefinierte Domains mit SSL/TLS-Zertifikaten zuweisen, den Ingress so konfigurieren, dass interner (VNet) oder externer Datenverkehr ermöglicht wird, und Verkehrsregeln für das pfadbasierte Routing über mehrere Apps hinweg festlegen.

Umwelt und Vernetzung

Container-Apps befinden sich in einer Container-Apps-Umgebung, die als sichere Grenze für Ihre Apps dient. Die Umgebung unterstützt die VNet-Integration (externe oder interne Umgebungen), wodurch private Kommunikation zwischen Apps, Datenbanken und anderen Azure-Diensten ermöglicht wird. Sie können auch private Endpunkte und Netzwerksicherheitsgruppen verwenden, um den Datenverkehr zu steuern.

Managed Identity und Geheimnisse

ACA unterstützt Azure Managed Identities, sodass sich Ihre Container ohne Hardcoding-Anmeldeinformationen bei Azure-Diensten (Key Vault, Storage, SQL Database) authentifizieren können. Secrets können direkt aus Azure Key Vault bezogen werden, und Umgebungsvariablen oder Volumes können zur Laufzeit eingespeist werden.

Bereitstellen von Azure Container Apps

Die Bereitstellung einer Container-App umfasst mehrere Schritte, vom Containerisieren Ihrer Anwendung über die Konfiguration der Umgebung bis hin zum Skalieren von Regeln.

Schritt 1: Bereiten und drücken Sie Ihr Containerbild vor

Beginnen Sie mit dem Erstellen einer Dockerdatei für Ihre Anwendung (z. B. .NET, Node.js, Python, Go). Stellen Sie sicher, dass das Bild optimiert ist (mehrstufige Builds, minimale Basisbilder). Schieben Sie das Bild in eine Containerregistrierung - idealerweise Azure Container Registry (ACR) für Nähe und Integration. Wenn Sie eine öffentliche Registrierung wie Docker Hub verwenden, kann ACA auch von dort aus ziehen, aber ACR bietet schnellere Ziehungen innerhalb des Azure-Netzwerks.

Schritt 2: Erstellen einer Container-App-Umgebung

Vor der Bereitstellung einer App müssen Sie eine Container-Apps-Umgebung erstellen. Dies kann über das Azure-Portal, Azure CLI, Bicep, ARM oder Terraform erfolgen. Die Umgebung definiert die Region, das virtuelle Netzwerk (optional) und ob intern oder öffentlich. Für die Produktion aktivieren Sie die VNet-Integration, um ausgehenden Datenverkehr zu sichern und private Endpunkte zu verwenden. Beispiel CLI-Befehl:

az containerapp env create --name MyEnvironment --resource-group MyRG --location eastus

Schritt 3: Definieren und Bereitstellen der Container-App

Verwenden Sie den Befehl , um die App zu definieren, wobei auf das Bild, Umgebungsvariablen, Geheimnisse, Eingabeeinstellungen und Skalierungskonfiguration verwiesen wird.

az containerapp create --name myapp --resource-group MyRG \
 --environment MyEnvironment --image myregistry.azurecr.io/myapp:v1 \
 --target-port 8080 --ingress external --query properties.configuration.ingress.fqdn

Dadurch wird eine Revision erstellt und die App über ein automatisch generiertes FQDN freigelegt. Sie können die App später mit neuen Bildern, Umgebungsvariablen oder Skalierungsregeln aktualisieren.

Schritt 4: Konfigurieren von Geheimnissen und verwalteter Identität

Speichern Sie sensible Werte (Verbindungszeichenfolgen, API-Schlüssel) in Azure Key Vault und verweisen Sie auf diese als Geheimnisse in Ihrer Container-App. Aktivieren Sie eine system- oder benutzerzugeordnete verwaltete Identität, damit sich Ihre App ohne Anmeldeinformationen im Code gegenüber Key Vault und anderen Azure-Ressourcen authentifizieren kann.

Schritt 5: Skalierungsregeln festlegen

Autoskalierung basierend auf HTTP-Anforderungen, CPU, Speicher oder benutzerdefinierten Ereignisquellen konfigurieren (z. B. Azure Service Bus-Warteschlangen, Kafka, RabbitMQ), KEDA-Skalierungsskalierung von externen Systemen auslösen, z. B. Skalierung basierend auf der Anzahl der Nachrichten in einer Warteschlange:

az containerapp update --name myapp --resource-group MyRG \
 --min-replicas 0 --max-replicas 10 \
 --scale-rule-name queue-scaler --scale-rule-type azure-queue \
 --scale-rule-auth connection=queue-connection-string \
 --scale-rule-metadata "queueName=myqueue" "queueLength=5"

Verwalten von Azure Container Apps

Einmal eingesetzt, beinhaltet das kontinuierliche Management Überwachung, Aktualisierung und Feinabstimmung von Skalierung und Sicherheit.

Revisionsmanagement und -bereitstellungsstrategien

Verwenden Sie das Revisionsmodell, um Ihre App ohne Ausfallzeiten zu aktualisieren. Wenn Sie ein neues Bild drücken oder die Konfiguration ändern, erstellt ACA eine neue Revision. Standardmäßig geht der gesamte Datenverkehr auf die neueste Revision über. Um eine blaugrüne Bereitstellung zu implementieren:

  1. Aktualisieren Sie die App mit einer neuen Überarbeitung (halten Sie die alte aktiv).
  2. Senden Sie einen kleinen Prozentsatz des Datenverkehrs an die neue Revision.
  3. Steigern Sie den Traffic schrittweise, während Sie Fehler und Latenz überwachen.
  4. Wenn stabil, routen Sie 100% Traffic zur neuen Revision und deaktivieren Sie die alte.

Dieser Ansatz minimiert das Risiko und ermöglicht ein schnelles Rollback, indem der Traffic auf eine vorherige Überarbeitung zurückgeführt wird.

Überwachung mit Azure Monitor und Log Analytics

Die Integration mit Azure Monitor erfolgt automatisch. Sie können Metriken (Anfrageanzahl, CPU, Speicher, Replikatanzahl) im Azure Portal anzeigen. Für detaillierte Protokolle konfigurieren Sie Ihre Container App, um Stdout/Stderr- und Systemprotokolle an einen Log Analytics-Arbeitsbereich zu senden. Verwenden Sie Kusto-Abfragen, um Anomalien zu erkennen, Fehler zu debugen oder Verkehrsmuster zu analysieren. Sie können auch Application Insights für verteilte Verfolgung und Leistungsüberwachung aktivieren.

Autoscaling in der Produktion

Während die Standard-Autoskalierung für viele Szenarien gut funktioniert, erfordern Produktions-Apps oft benutzerdefinierte KEDA-Skalierer. Gemeinsame Beispiele: Skalierung basierend auf Azure Service Bus Nachrichtenzahl, Azure Event Hubs Backlog oder einer benutzerdefinierten Prometheus-Metrik. Stellen Sie sicher, dass Sie geeignete Min- und Max-Repliken einstellen, um den Basisdatenverkehr und die Burst-Kapazität zu bewältigen. Verwenden Sie das Azure-Portal oder CLI, um den Skalierungsverlauf zu überwachen und Schwellenwerte anzupassen.

Aktualisieren von Containern und Rolling Back

Container Apps unterstützt Updates mit Null-Downtime-Aktualisierungen durch Revisionsaktivierung. Wenn Sie ein neues Image bereitstellen, wird die neue Revision parallel zur alten gestartet. Sobald die neue Revision gesund ist, wird der Traffic umgeleitet. Wenn die Gesundheitschecks fehlschlagen, kann ACA automatisch zurückgesetzt werden. Für ein manuelles Rollback setzen Sie einfach das Traffic-Gewicht auf 100% zurück zur vorherigen Revision.

Best Practices für Sicherheit

Verwaltete Identitäten für Azure-Ressourcen

Aktivieren Sie die systemzugeordnete verwaltete Identität für Ihre Container App. Dies ermöglicht es der App, auf Key Vault, Storage und Datenbanken zuzugreifen, ohne Anmeldeinformationen im Container-Image oder in Umgebungsvariablen zu speichern. Verwenden Sie die Identität zur Authentifizierung über Azure AD.

Secret Management mit Key Vault

Niemals Geheimnisse festcodeen. Speichern Sie alle sensiblen Daten in Azure Key Vault und verweisen Sie sie in Ihrer Container App-Konfiguration als geheime Referenzen. ACA fügt diese automatisch als Umgebungsvariablen oder Volume-Mounts zur Laufzeit ein. Drehen Sie Geheimnisse in Key Vault ohne erneute Bereitstellung.

Netzwerksicherheit

Stellen Sie für interne Dienste Ihre Container-Apps-Umgebung mit deaktiviertem externen Datenverkehr bereit. Verwenden Sie die VNet-Integration, um ausgehenden/eingehenden Datenverkehr über Netzwerksicherheitsgruppen einzuschränken. Aktivieren Sie für eingehenden Datenverkehr von öffentlichen Endpunkten IP-Beschränkungen bei Eindringen oder verwenden Sie Azure Front Door oder API Management vor.

Container Image Security

Verwenden Sie vertrauenswürdige Basisbilder von Microsoft Artifact Registry oder anderen sicheren Quellen. Scannen Sie Bilder auf Schwachstellen mit Microsoft Defender for Containers oder dem integrierten Scannen von ACR. Signieren Sie Bilder, um die Integrität zu gewährleisten. Aktivieren Sie das Durchziehen von Bildern durch ACR mit privaten Endpunkten, um die Öffentlichkeit nicht zu belichten.

Compliance und Zertifizierungen

Azure Container Apps erbt Azure-Compliance-Zertifizierungen (SOC, PCI DSS, HIPAA, ISO). Stellen Sie sicher, dass Ihre Umgebung in einer Region bereitgestellt wird, die die Anforderungen an die Datenresidenz erfüllt. Verwenden Sie Azure Policy, um die Governance durchzusetzen (z. B. VNet-Injection oder bestimmte Bildregistrierungen erforderlich).

Kostenoptimierung

Konsum vs. Dedicated Plan

ACA bietet zwei Preisstufen an: Konsum (Pay per vCPU‐Sekunde und Memory‐Sekunde) und Dediziert (reserviert vCPU und Memory).Konsum ist am besten für variable oder verkehrsarme Workloads geeignet, während Dedicated vorhersehbare Kosten und Leistung für stationäre Produktions-Apps bietet.

Autoskalierung und Skalierung auf Null

Konfigurieren Sie minimale Replikate auf 0 für Hintergrundjobs oder APIs mit unvorhersehbarem Datenverkehr. Dies gewährleistet keine Rechenkosten im Leerlauf. Für kritische Pfade, die sofortige Reaktion benötigen, legen Sie mindestens 1 fest, um Kaltstarts zu vermeiden. Verwenden Sie KEDA-Skalierer, um auf Warteschlangentiefe oder Datenbanklast zu reagieren, anstatt immer auf CPU zu sein.

Reservierte Instanzen und Sparpläne

Bei dedizierten Plänen sollten Sie sich auf ein Jahr oder drei Jahre reservierte Instanzen festlegen, um bis zu 40% im Vergleich zu Pay-as-you-go zu sparen. Azure-Sparpläne gelten auch für Container-Apps. Analysieren Sie Ihre Nutzung und schätzen Sie den Basisverbrauch, bevor Sie Kapazitäten reservieren.

Effiziente Container-Bilder

Kleinere Bilder reduzieren die Pull-Zeit und Speicherkosten. Verwenden Sie Alpine oder distroless Basisbilder, bereinigen Sie Build-Artefakte und Layer-Caches mit Bedacht. Speichern Sie nur die Laufzeit in Ihrem Bild - halten Sie Build-Tools in einer separaten Builder-Phase. Dies verbessert auch die Startzeit und die Skalierungsgeschwindigkeit.

Integration mit anderen Azure Services

Azure Container Registry

Verwenden Sie ACR als Ihr privates Register für Container-Apps. Es unterstützt Geo-Replikation, Bildscanning und Artefaktsignierung. Aktivieren Sie das "Admin"-Konto von ACR oder verwenden Sie die verwaltete Identität, um Pulls sicher zu authentifizieren. Für regionenübergreifende Bereitstellungen, Geo-Replizieren Sie Ihre Bilder, um die Latenz zu reduzieren.

CI/CD-Pipelines mit Azure DevOps und GitHub-Aktionen

Automatisieren Sie Bereitstellungen mit Azure CLI-Aufgaben in Azure DevOps oder GitHub-Aktionen. Sie können ein Image erstellen, zu ACR drücken und die Container-App-Revision in einer einzigen Pipeline aktualisieren. Beispiel GitHub-Aktionen Workflowschritt:

- name: Deploy to Azure Container Apps
 run: az containerapp update --name myapp --resource-group MyRG --image myacr.azurecr.io/myapp:latest

Verwenden Sie Bereitstellungsschlitze (Revision Traffic Splitting), um Änderungen vor dem vollständigen Rollout zu inszenieren und zu validieren.

Event-Driven Integration

Nutzen Sie Daprs Pub/Sub-Baustein mit Azure Service Bus oder Event Hubs, um Microservices zu entkoppeln. Konfigurieren Sie KEDA-Scaler, um Skalierung basierend auf der Warteschlangentiefe auszulösen. Dieses Muster eignet sich hervorragend für Auftragsverarbeitung, Benachrichtigung oder Batch-Workflows.

Best Practices für moderne App Entwicklung

  • Adopt a microservices architecture that aligns with ACA’s revision and ingress model.Every service should have its own Container App with independent scaleing and lifecycle.
  • Implementieren Sie CI/CD-Pipelines, die automatisch bauen, testen, scannen und bereitstellen. Verwenden Sie Infrastructure-as-Code (Bicep/Terraform) zur Definition von Umgebungen, um Wiederholbarkeit zu gewährleisten.
  • Priorisieren Sie die Sicherheit von Anfang an: Verwenden Sie verwaltete Identitäten, Key Vault-Referenzen, VNet-Integration und Bildscannen. Drehen Sie Geheimnisse regelmäßig und prüfen Sie den Zugriff.
  • Optimieren Sie für Kosten, indem Sie den richtigen Plan auswählen, sensible Min/Max-Repliken festlegen und reservierte Kapazität für stetige Workloads verwenden.
  • Beobachtbarkeit aktivieren früh: Logs an Log Analytics senden, Application Insights aktivieren und Warnmeldungen zu Fehlerraten, Latenzanforderung und Replikatzahl einrichten.
  • Verwenden Sie Dapr und KEDA, um Querschnittsthemen zu behandeln: staatliches Management, Retries, Pub/Sub und Event-gesteuerte Skalierung.
  • Design für die Skalierung auf Null, wenn es Ihre Arbeitslast erlaubt. Kaltstarts sind normalerweise unter zwei Sekunden für einfache Container; Sie können mit Gesundheitssonden und geeigneten Min-Repliken abschwächen.

Durch die Anwendung dieser Praktiken und die Nutzung der serverlosen Containerlaufzeit von Azure Container Apps können Teams moderne Anwendungen erstellen und betreiben, die skalierbar, sicher und kosteneffizient sind. Die Plattform reduziert den Betriebsaufwand und gibt Entwicklern die Freiheit, jede Sprache, jedes Framework oder jedes Tool zu verwenden, das in einem Container ausgeführt wird.

Für offizielle Deep-Dive-Anleitungen siehe die Dokumentation Azure Container Apps Um mehr über verteilte Anwendungsmuster mit Dapr zu erfahren, besuchen Sie die Dapr-Dokumentation Für ereignisgesteuerte Autoskalierungsbeispiele lesen Sie die KEDA-Dokumentation.