Bewährte Methoden für zuverlässigen Azure Functions-Code

Azure Functions ist eine ereignisgesteuerte Compute-on-Demand-Umgebung, die die vorhandene Azure App Service-Anwendungsplattform um Funktionen zur Implementierung von Code erweitert, der durch Ereignisse ausgelöst wird, die in Azure, in Diensten von Drittanbietern und in lokalen Systemen auftreten. Mit Functions können Sie Lösungen erstellen, indem Sie eine Verbindung mit Datenquellen oder Messaginglösungen herstellen, wodurch die Verarbeitung und Reaktion auf Ereignisse vereinfacht wird. Functions wird in Azure-Rechenzentren ausgeführt, die mit vielen integrierten Komponenten komplex sind. In einer gehosteten Cloudumgebung wird erwartet, dass VMs gelegentlich neu gestartet oder verschoben werden können und Systemupgrades durchgeführt werden. Ihre Funktions-Apps sind wahrscheinlich auch von externen APIs, Azure-Diensten und anderen Datenbanken abhängig, die ebenfalls anfällig für regelmäßige Unzuverlässigkeiten sind.

In diesem Artikel werden einige bewährte Methoden zum Entwerfen und Bereitstellen effizienter Funktions-Apps beschrieben, die fehlerfrei bleiben und in einer cloudbasierten Umgebung gut funktionieren.

Auswählen des richtigen Hostingplans

Wenn Sie eine Funktions-App in Azure erstellen, müssen Sie einen Hostingplan für die App auswählen. Der von Ihnen ausgewählten Plan wirkt sich auf Leistung, Zuverlässigkeit und Kosten aus. Für Functions sind drei grundlegende Hostingpläne verfügbar:

Alle Hostingpläne sind allgemein verfügbar (GA), wenn Sie Linux oder Windows ausführen.

Im Kontext der App Service-Plattform ist der Premium-Plan, der zum dynamischen Hosten Ihrer Funktionen verwendet wird, der Elastic Premium Plan (EP). Es gibt andere dedizierte Pläne (App Service), die als Premium bezeichnet werden. Weitere Informationen finden Sie im Artikel Premium-Plan.

Der von Ihnen ausgewählte Hostingplan bestimmt folgendes Verhalten:

  • Wie Ihre Funktions-App bedarfsbasiert skaliert und die Instanzzuordnung verwaltet wird.
  • Die für jede Instanz der Funktions-App verfügbaren Ressourcen.
  • Die Unterstützung für erweiterte Funktionen wie Azure Virtual Network-Konnektivität

Weitere Informationen zur Auswahl des richtigen Hostingplans sowie einen detaillierten Vergleich der Pläne finden Sie unter Azure Functions-Hostingoptionen.

Es ist wichtig, den richtigen Plan auszuwählen, wenn Sie Ihre Funktions-App erstellen. Functions bietet eine eingeschränkte Möglichkeit, Ihren Hostingplan zu wechseln, in erster Linie zwischen Verbrauchs- und Elastic Premium-Plänen. Weitere Informationen finden Sie unter Planmigration.

Richtiges Konfigurieren des Speichers

Functions erfordert, dass Ihrer Funktions-App ein Speicherkonto zugeordnet ist. Die Speicherkontoverbindung wird vom Functions-Host für Vorgänge wie das Verwalten von Triggern und das Protokollieren von Funktionsausführungen verwendet. Sie wird auch beim dynamischen Skalieren von Funktions-Apps verwendet. Weitere Informationen finden Sie unter Speicherüberlegungen für Azure Functions.

Ein falsch konfiguriertes Dateisystem oder Speicherkonto in Ihrer Funktions-App kann sich auf die Leistung und Verfügbarkeit Ihrer Funktionen auswirken. Hilfe bei der Problembehandlung eines falsch konfigurierten Speicherkontos finden Sie im Artikel zur Problembehandlung für Speicher.

Speicherverbindungseinstellungen

Funktions-Apps, die dynamisch skaliert werden, können entweder über einen Azure Files-Endpunkt in Ihrem Speicherkonto oder von den Dateiservern ausgeführt werden, die Ihren skalierten Instanzen zugeordnet sind. Dieses Verhalten wird durch die folgenden Anwendungseinstellungen gesteuert:

Diese Einstellungen werden nur unterstützt, wenn die Ausführung in einem Premium-Plan oder in einem Verbrauchsplan unter Windows erfolgt.

Wenn Sie Ihre Funktions-App entweder im Azure-Portal oder mit der Azure CLI oder Azure PowerShell erstellen, werden diese Einstellungen bei Bedarf für Ihre Funktions-App erstellt. Wenn Sie Ihre Ressourcen aus einer Azure Resource Manager-Vorlage (ARM-Vorlage) erstellen, müssen Sie auch WEBSITE_CONTENTAZUREFILECONNECTIONSTRING in die Vorlage einschließen.

Schließen Sie in Ihrer ersten Bereitstellung mithilfe einer ARM-Vorlage das WEBSITE_CONTENTSHARE-Element nicht ein, das für Sie generiert wird.

Sie können die folgenden ARM-Vorlagenbeispiele verwenden, um diese Einstellungen richtig zu konfigurieren:

Speicherkontokonfiguration

Beim Erstellen einer Funktions-App müssen Sie ein allgemeines Azure Storage-Konto erstellen oder verknüpfen, das Blob-, Warteschlangen- und Tabellenspeicher unterstützt. Functions basiert für Vorgänge wie das Verwalten von Triggern und das Ausführen von Protokollierfunktionen auf Azure Storage. Die Verbindungszeichenfolge des Speicherkontos für Ihre Funktions-App finden Sie in den Anwendungseinstellungen AzureWebJobsStorage und WEBSITE_CONTENTAZUREFILECONNECTIONSTRING.

Beachten Sie beim Erstellen dieses Speicherkontos die folgenden Überlegungen:

  • Erstellen Sie das Speicherkonto in derselben Region wie die Funktions-App, um die Latenz zu reduzieren.

  • Um die Leistung in der Produktion zu verbessern, verwenden Sie ein separates Speicherkonto für jede Funktions-App. Dies gilt insbesondere für Durable Functions und durch Event Hub ausgelöste Funktionen.

  • Verwenden Sie für durch Event Hub ausgelöste Funktionen kein Konto mit aktivierter Data Lake Storage-Funktion.

Verwalten von großen Datasets

Wenn die Ausführung unter Linux erfolgt, können Sie zusätzlichen Speicher hinzufügen, indem Sie eine Dateifreigabe einbinden. Das Einbinden einer Freigabe ist eine praktische Möglichkeit für eine Funktion, ein großes vorhandenes Dataset zu verarbeiten. Weitere Informationen finden Sie unter Einbinden von Dateifreigaben.

Organisieren Ihrer Funktionen

Sie entwickeln und veröffentlichen im Rahmen Ihrer Lösung wahrscheinlich mehrere Funktionen. Diese Funktionen werden häufig in einer einzelnen Funktions-App zusammengefasst, können aber auch in separaten Funktions-Apps ausgeführt werden. In den Hostingplänen Premium und Dedicated (App Service) können auch mehrere Funktions-Apps dieselben Ressourcen gemeinsam nutzen, indem sie im selben Plan ausgeführt werden. Wie Sie Ihre Funktionen und Funktions-Apps gruppieren, hat Einfluss auf die Leistung, Skalierung, Konfiguration, Bereitstellung und Sicherheit Ihrer gesamten Lösung.

Für den Verbrauchstarif und den Premium-Plan werden alle Funktionen in einer Funktions-App dynamisch gemeinsam skaliert.

Weitere Informationen zum Organisieren Ihrer Funktionen finden Sie unter Bewährte Methoden für die Funktionsorganisation.

Optimieren von Bereitstellungen

Beim Bereitstellen einer Funktions-App ist es wichtig zu beachten, dass die Bereitstellungseinheit für Funktionen in Azure die Funktions-App ist. Alle Funktionen in einer Funktions-App werden zur gleichen Zeit bereitgestellt, in der Regel aus demselben Bereitstellungspaket.

Berücksichtigen Sie diese Optionen für eine erfolgreiche Bereitstellung:

  • Planen Sie die Ausführung Ihrer Funktionen aus dem Bereitstellungspaket. Dieser Ansatz Ausführung aus dem Paket bietet die folgenden Vorteile:

    • Reduziert das Risiko von Sperrungen beim Kopieren von Dateien.
    • Kann direkt in einer Produktions-App bereitgestellt werden, wodurch ein Neustart ausgelöst wird.
    • Sie wissen, dass alle Dateien im Paket für Ihre App verfügbar sind.
    • Verbessert die Leistung von ARM-Vorlagenbereitstellungen.
    • Kann Kaltstartzeiten verringern, insbesondere für JavaScript-Funktionen mit großen npm-Paketstrukturen.
  • Erwägen Sie die Verwendung von Continuous Deployment, um Bereitstellungen mit Ihrer Quellcodeverwaltungslösung zu verbinden. Mit Continuous Deployments können Sie die Ausführung ebenfalls aus dem Bereitstellungspaket vornehmen.

  • Für Hosting im Premium-Plan sollten Sie einen Aufwärmtrigger hinzufügen, um die Latenz zu verringern, wenn neue Instanzen hinzugefügt werden. Weitere Informationen finden Sie unter Azure Functions-Aufwärmtrigger.

  • Um die Downtime bei Bereitstellungen zu verringern und Rollbacks von Bereitstellungen zu ermöglichen, können Sie ggf. Bereitstellungsslots nutzen. Weitere Informationen finden Sie unter Azure Functions-Bereitstellungsslots.

Schreiben robuster Funktionen

Es gibt mehrere Entwurfsprinzipien, die Sie befolgen können, wenn Sie Ihren Funktionscode schreiben, um die allgemeine Leistung und Verfügbarkeit Ihrer Funktionen zu verbessern. Zu diesen Prinzipien gehören:

Da vorübergehende Fehler bei Cloud Computing häufig vorkommen, sollten Sie beim Zugriff auf cloudbasierte Ressourcen ein Wiederholungsmuster verwenden. Viele Trigger und Bindungen implementieren bereits Wiederholungsversuche.

Sicherheitsorientiertes Design

Sicherheit wird am besten während der Planungsphase und nicht erst berücksichtigt, nachdem Ihre Funktionen einsatzbereit sind. Informationen zum sicheren Entwickeln und Bereitstellen von Funktionen finden Sie unter Sichern von Azure Functions.

Inbetrachtziehen von Parallelität

Wenn der Bedarf für Ihre Funktions-App aufgrund eingehender Ereignisse zunimmt, werden Funktions-Apps, die im Verbrauchstarif und Premium-Plan ausgeführt werden, aufskaliert. Es ist wichtig zu verstehen, wie Ihre Funktions-App auf Last reagiert und wie die Trigger konfiguriert werden können, um eingehende Ereignisse zu verarbeiten. Eine allgemeine Übersicht finden Sie unter Ereignisgesteuerte Skalierung in Azure Functions.

Dedizierte Pläne (App Service) erfordern, dass Sie die Aufskalierung Ihrer Funktions-Apps vorsehen.

Anzahl von Workerprozessen

In einigen Fällen ist es effizienter, die Last zu bewältigen, indem mehrere Prozesse (so genannte Sprachworkerprozesse) in der Instanz vor der horizontalen Skalierung erstellt werden. Die maximal zulässige Anzahl von Sprachworkerprozessen wird durch die FUNCTIONS_WORKER_PROCESS_COUNT-Einstellung gesteuert. Der Standardwert für diese Einstellung ist 1. Dies bedeutet, dass nicht mehrere Prozesse verwendet werden. Nachdem die maximale Anzahl von Prozessen erreicht wurde, wird die Funktions-App auf mehr Instanzen aufskaliert, um die Last zu verarbeiten. Diese Einstellung gilt nicht für Funktionen der C#-Klassenbibliothek, die im Hostprozess ausgeführt werden.

Wenn Sie FUNCTIONS_WORKER_PROCESS_COUNT für einen Premium-Plan oder einen dedizierten Plan (App Service) verwenden, beachten Sie die Anzahl der Kerne, die von Ihrem Plan bereitgestellt werden. Beispielsweise bietet der Premium-Plan EP2 zwei Kerne, daher sollten Sie mit dem Wert 2 beginnen und bei Bedarf um zwei bis zum Höchstwert erhöhen.

Triggerkonfiguration

Bei der Planung von Durchsatz und Skalierung ist es wichtig zu verstehen, wie die verschiedenen Triggertypen Ereignisse verarbeiten. Mit einigen Triggern können Sie das Batchverarbeitungsverhalten steuern und Parallelität verwalten. Eine häufige Anpassung der Werte in diesen Optionen kann die Skalierung der Instanz an die Anforderungen der aufgerufenen Funktionen vereinfachen. Diese Konfigurationsoptionen werden auf alle Trigger in einer Funktions-App angewendet und in der Datei „host.json“ für die App verwaltet. Details zu den Einstellungen finden Sie im Abschnitt zur Konfiguration der jeweiligen Triggerreferenz.

Weitere Informationen zur Verarbeitung von Nachrichtenstreams durch Functions finden Sie unter Zuverlässige Azure Functions-Ereignisverarbeitung.

Planen von Verbindungen

Funktions-Apps, die im Verbrauchstarif ausgeführt werden, unterliegen Verbindungsgrenzwerten. Diese Grenzwerte werden pro Instanz erzwungen. Aufgrund dieser Grenzwerte und als allgemeine bewährte Methode sollten Sie Ihre ausgehenden Verbindungen aus Ihrem Funktionscode optimieren. Weitere Informationen finden Sie unter Verwalten von Verbindungen in Azure Functions.

Sprachspezifische Erwägungen

Beachten Sie für die Sprache Ihrer Wahl die folgenden Überlegungen:

Maximieren der Verfügbarkeit

Kaltstart ist ein wichtiger Aspekt bei serverlosen Architekturen. Weitere Informationen finden Sie unter Kaltstarts. Wenn Kaltstart ein Thema in Ihrem Szenario ist, finden Sie ausführlichere Informationen im Beitrag Grundlegendes zu serverlosem Kaltstart.

Der Premium-Plan ist der empfohlene Plan zum Reduzieren von Kaltstarts bei gleichzeitiger Beibehaltung dynamischer Skalierung. Mithilfe der folgenden Anleitung können Sie Kaltstarts reduzieren und die Verfügbarkeit in allen drei Hostingplänen verbessern.

Planen Leitfaden
Premium-Plan Implementieren eines Aufwärmtriggers in Ihrer Funktions-App
Festlegen der Werte für Always-Ready-Instanzen und des Grenzwerts für maximalen Burst
Verwenden der Triggerunterstützung für virtuelle Netzwerke bei Verwendung von Nicht-HTTP-Triggern für ein virtuelles Netzwerk
Dedizierte Pläne Ausführung in mindestens zwei Instanzen mit aktivierter Azure App Service-Integritätsprüfung
Implementieren automatischer Skalierung
Verbrauchstarif • Überprüfen Sie die Verwendung von Singletonmustern und die Parallelitätseinstellungen für Bindungen und Trigger, um zu vermeiden, dass künstliche Einschränkungen für die Skalierung Ihrer Funktions-App gelten.
Überprüfen Sie die functionAppScaleLimit-Einstellung, die horizontale Skalierung einschränken kann
• Überprüfen Sie während der Entwicklung und beim Testen, ob ein Grenzwert für das tägliche Nutzungskontingent (GB-Sek.) festgelegt wurde. Erwägen Sie, diesen Grenzwert in Produktionsumgebungen zu entfernen.

Effektive Überwachung

Azure Functions bietet eingebaute Integration in Azure Application Insights zur Überwachung der Funktionsausführung und der von Ihrem Code geschriebenen Ablaufverfolgungen. Weitere Informationen finden Sie unter Überwachen von Azure Functions. Azure Monitor bietet auch Funktionen zum Überwachen der Integrität der Funktions-App selbst. Weitere Informationen finden Sie unter Überwachen mit Azure Monitor.

Bei der Verwendung der Application Insights-Integration zur Überwachung Ihrer Funktionen sollten Sie die folgenden Punkte beachten:

  • Stellen Sie sicher, dass die Anwendungseinstellung AzureWebJobsDashboard entfernt wird. Diese Einstellung wurde in einer älteren Version von Functions unterstützt. Wenn sie vorhanden ist, verbessert das Entfernen von AzureWebJobsDashboard die Leistung Ihrer Funktionen.

  • Überprüfen Sie die Application Insights-Protokolle. Wenn Daten fehlen, die Sie erwarten, sollten Sie die Einstellungen für Stichprobenentnahmen anpassen, um Ihr Überwachungsszenario besser zu erfassen. Sie können die excludedTypes-Einstellung verwenden, um bestimmte Typen von der Stichprobenentnahme auszuschließen, z. B. Request oder Exception. Weitere Informationen finden Sie unter Konfigurieren des Samplings.

Azure Functions ermöglicht es Ihnen auch, vom System generierte und benutzergenerierte Protokolle an Azure Monitor-Protokolle zu senden. Die Integration in Azure Monitor-Protokolle befindet sich derzeit in der Vorschau.

Integrierte Redundanz

Ihre geschäftlichen Anforderungen erfordern möglicherweise, dass Ihre Funktionen immer verfügbar sind, auch während eines Rechenzentrumsausfalls. Informationen dazu, wie Sie einen Ansatz mit mehreren Regionen verwenden, um ihre kritischen Funktionen immer auszuführen, finden Sie unter Georedundante Azure Functions-Notfallwiederherstellung und -Hochverfügbarkeit.

Nächste Schritte

Verwalten Ihrer Funktions-App