Abschätzen nutzungsbasierter Kosten

In diesem Artikel erfahren Sie, wie Sie die Kosten für einen Hostingplan im Flex-Verbrauchstarif und im Verbrauchstarif schätzen können.

Azure Functions bietet derzeit die folgenden Hostingoptionen für Ihre Funktions-Apps, wobei jede Option über ein eigenes Preismodell für den Hostingplan verfügt:

Planen Beschreibung
Flex-Verbrauchstarif Sie zahlen die Ausführungszeit für die Instanzen, auf denen Ihre Funktionen ausgeführt werden, sowie alle immer einsatzbereiten Instanzen. Instanzen werden basierend auf der Anzahl eingehender Ereignisse dynamisch hinzugefügt und entfernt. Dies ist der empfohlene Plan mit dynamischer Skalierung, der auch die VNet-Integration unterstützt.
Premium Bietet Ihnen dieselben Features und Skalierungsmechanismen wie der Verbrauchstarif, aber mit mehr Leistung und einer Integration virtueller Netzwerke. Die Kosten basieren auf dem von Ihnen gewählten Tarif. Weitere Informationen finden Sie unter Premium-Plan (Premium-Tarif) für Azure Functions.
Dediziert (App Service)
(Tarif „Basic“ oder höher)
Wenn Sie in dedizierten VMs oder in Isolierung ausführen müssen, benutzerdefinierte Images verwenden oder die Überkapazität Ihres App Service-Plans nutzen möchten. Verwendet normale App Service-Planabrechnung. Die Kosten basieren auf dem von Ihnen gewählten Tarif.
Container-Apps Erstellen Sie containerisierten Funktions-Apps, und stellen Sie sie in einer vollständig verwalteten Umgebung bereit, die von Azure Container Apps gehostet wird. So können Sie Ihre Funktionen zusammen mit anderen Microservices, APIs, Websites und Workflows als in Containern gehostete Programme ausführen.
Verbrauch Ihnen wird nur die Zeit in Rechnung gestellt, die Ihre Funktions-App auch ausgeführt wird. Dieser Tarif umfasst pro Abonnement eine kostenlose Zuweisung.

Wichtig

Der Flex-Verbrauchstarif befindet sich derzeit in der Vorschau.

Sie sollten immer die Option auswählen, die die Feature-, Leistungs- und Kostenanforderungen für Ihre Funktionsausführungen am besten unterstützt. Weitere Informationen finden Sie unter Skalierung und Hosting von Azure Functions.

Der Schwerpunkt dieses Artikels liegt auf Verbrauchs- und Flex-Verbrauchstarifen, da die Abrechnung in diesen Tarifen von aktiven Ausführungszeiten innerhalb jeder Instanz abhängt.

Durable Functions können ebenfalls in beiden Tarifen ausgeführt werden. Weitere Informationen zu den Kostenüberlegungen bei der Verwendung von Durable Functions finden Sie unter Abrechnung von Durable Functions.

Nutzungsbasierte Kosten

Die Berechnung nutzungsbasierter Kosten, einschließlich kostenloser Zuweisungen, hängt vom jeweiligen Tarif ab. Die aktuellsten Informationen zu Kosten und Zuweisungen finden Sie auf der Seite Azure Functions – Preise.

Es gibt zwei Modi, mit denen Ihre Kosten bestimmt werden, wenn Sie Ihre Apps im Flex-Verbrauchstarif ausführen. Jeder Modus wird pro Instanz bestimmt.

Abrechnungsmodus Beschreibung
Bei Bedarf Bei Ausführung im Modus Bei Bedarf wird Ihnen nur der Zeitraum in Rechnung gestellt, in dem der Funktionscode für Ihre verfügbaren Instanzen ausgeführt wird. Im bedarfsorientierten Modus ist keine Mindestanzahl an Instanzen erforderlich. Ihnen wird Folgendes in Rechnung gestellt:

• Die Gesamtmenge des bereitgestellten Arbeitsspeichers zur aktiven Ausführung von Funktionen durch On-Demand-Instanzen (in GB-Sekunden) abzüglich einer kostenlosen Zuweisung von GB-Sekunden pro Monat.
• Die Gesamtzahl der Ausführungen abzüglich einer kostenlosen Zuweisung (Anzahl) von Ausführungen pro Monat.
Immer bereit Sie können eine oder mehrere Instanzen konfigurieren, die bestimmten Triggertypen (HTTP/Durable/Blob) und einzelnen Funktionen zugewiesen sind, die immer verfügbar sind, um Anforderungen zu verarbeiten. Wenn immer einsatzbereite Instanzen aktiviert sind, werden Ihnen folgende Kosten in Rechnung gestellt:

• Die Gesamtmenge an Arbeitsspeicher, der in allen immer einsatzbereiten Instanzen bereitgestellt wird, die als Baseline bezeichnet werden (in GB-Sekunden).
• Die Gesamtmenge des bereitgestellten Arbeitsspeichers für jede immer einsatzbereite Instanz während des Zeitraums, in dem sie aktiv Funktionen ausführt (in GB-Sekunden).
• Die Gesamtanzahl der Ausführungen.

Bei der Abrechnung der stets bereiten Instanzen gibt es keine kostenlosen Zuweisungen.

In diesem Diagramm wird dargestellt, wie die bedarfsorientierten Kosten in diesem Tarif bestimmt werden:

Diagramm der bedarfsorientierten Kosten des Flex-Verbrauchstarifs basieren auf Last (Anzahl der Instanzen) und Zeit

Zusätzlich zur Ausführungszeit wird Ihnen bei Verwendung einer oder mehrerer immer einsatzbereiter Instanzen auch ein niedrigerer Basistarif für die Anzahl der von Ihnen verwalteten, immer einsatzbereiten Instanzen abgerechnet. Die Ausführungszeit für immer einsatzbereite Instanzen ist möglicherweise günstiger als die Ausführungszeit für Instanzen mit bedarfsorientierter Ausführung.

Wichtig

In diesem Artikel werden Preise nur für ein besseres Verständnis der Beispielberechnungen bereitgestellt. Auf der Seite Azure Functions – Preise finden Sie die aktuellsten Informationen, wenn Sie Kosten schätzen, die beim Ausführen Ihrer Funktionen im Flex-Verbrauchstarif anfallen können.

Beachten Sie für die Beispiele in diesem Abschnitt die reduzierten Vorschaupreise in der Tabelle für die nutzungsbasierte Bezahlung in der Region „USA, Osten“.

Mode Zähler Kostenlose monatliche Zuweisungen Nutzungstarife
Bei Bedarf Ausführungszeit (GB-Sekunden) 100,000 $0.000016 pro GB-Sekunde
Bei Bedarf Ausführungen (Anzahl) 250,000 $0.20 pro Million Ausführungen
Immer bereit Baseline (Leerlaufzeit) (GB-Sekunden) - $0.000004 pro GB-Sekunde
Immer bereit Ausführungszeit (GB-Sekunden) - $0.000009 pro GB-Sekunde
Immer bereit Ausführungen (Anzahl) - $0.20 pro Million Ausführungen

Nehmen Sie als Beispiel eine Funktions-App, die nur aus HTTP-Triggern besteht, und die folgenden grundlegenden Fakten:

  • HTTP-Trigger verarbeiten 40 konstante Anforderungen pro Sekunde.
  • HTTP-Trigger verarbeiten 10 gleichzeitige Anforderungen.
  • Die Einstellung für die Arbeitsspeichergröße der Instanz ist 2048 MB.
  • Es wurden keine immer einsatzbereiten Instanzen konfiguriert. Das bedeutet, dass die App auf Null skaliert werden kann.

In einer solchen Situation hängen die Preise von der Art der Vorgänge ab, die während der Codeausführung durchgeführt werden. Sehen wir uns zwei Workloadszenarios an:

  • CPU-gebundene Workload: In einer CPU-gebundenen Workload gibt es keinen Vorteil, wenn mehrere Anforderungen parallel in derselben Instanz verarbeitet werden. Es ist also besser, jede Anforderung auf ihre eigene Instanz zu verteilen, damit Anforderungen so schnell wie möglich ohne Konflikte abgeschlossen werden. In diesem Szenario sollten Sie eine niedrige HTTP-Trigger-Parallelität von 1 festlegen. Bei 10 gleichzeitigen Anforderungen skaliert die App auf einen stabilen Zustand von ca. 10 Instanzen und jede Instanz ist fortlaufend aktiv und verarbeitet jeweils eine Anforderung.

    Da jede Instanz ca. 2 GB groß ist, ist der Verbrauch für eine einzelne fortlaufend aktive Instanz 2 GB * 3600 s = 7200 GB-s. Beim angenommenen Tarif für die bedarfsorientierte Ausführung (ohne kostenlose Zuweisungen) sind das also $0.1152 USD pro Stunde und Instanz. Da die CPU-gebundene App auf 10 Instanzen skaliert wird, liegt der Gesamtstundensatz für die Ausführungszeit bei $1.152 USD.

    Ebenso entspricht die Gebühr pro bedarfsorientierter Ausführung (ohne kostenlose Zuweisungen) für 40 Anforderungen pro Sekunde 40 * 3600 = 144,000 oder 0,144 Millionen Ausführungen pro Stunde. Die Gesamtkosten (ohne Zuweisungen) für Ausführungen liegen dann bei 0.144 * $0.20, also $0.0288 pro Stunde.

    In diesem Szenario liegen die Gesamtkosten für die bedarfsorientierte Ausführung auf 10 Instanzen bei $1.152 + $0.0288 = $1.1808 USD.

  • E/A-gebundene Workload: In einer E/A-gebundenen Workload wird die meiste Anwendungszeit auf eingehende Anforderungen gewartet. Dies kann durch den Netzwerkdurchsatz oder andere Upstreamfaktoren eingeschränkt werden. Aufgrund der eingeschränkten Eingaben kann der Code mehrere Vorgänge gleichzeitig ohne negative Auswirkungen verarbeiten. Gehen Sie in diesem Szenario davon aus, dass Sie alle 10 gleichzeitigen Anforderungen in derselben Instanz verarbeiten können.

    Da Nutzungsgebühren nur auf dem Arbeitsspeicher jeder aktiven Instanz basieren, wird die Nutzungsgebühr einfach wie folgt berechnet: 2 GB * 3600 s = 7200 GB-s. Beim angenommenen Tarif für bedarfsorientierte Ausführungen (ohne kostenlose Zuweisungen) ist die Gebühr für eine einzelne Instanz also $0.1152 USD pro Stunde.

    Genau wie im CPU-gebundenen Szenario entspricht die Gebühr pro bedarfsorientierter Ausführung (ohne kostenlose Zuweisungen) für 40 Anforderungen pro Sekunde 40 * 3600 = 144,000 oder 0,144 Millionen Ausführungen pro Stunde. Die Gesamtkosten (ohne Zuweisungen) für Ausführungen liegen dann bei 0.144 * $0.20, also $0.0288 pro Stunde.

    In diesem Szenario liegen die Gesamtkosten für die bedarfsorientierte Ausführung auf einer einzelnen Instanz bei $0.1152 + $0.0288 = $0.144 USD.

Wenn Sie die Gesamtkosten der Ausführung ihrer Funktionen in einem beliebigen Plan abschätzen, denken Sie daran, dass die Functions-Laufzeit mehrere andere Azure-Dienste verwendet, die jeweils gesondert abgerechnet werden. Wenn Sie Preise für Funktions-Apps abschätzen, müssen Sie für alle Trigger und Bindungen, die mit anderen Azure-Diensten integriert werden, diese anderen Dienste erstellen und dafür bezahlen.

Für Funktionen, die in einem Verbrauchstarif ausgeführt werden, bestehen die Gesamtkosten aus den Ausführungskosten ihrer Funktionen plus den Kosten für Bandbreite und andere Dienste.

Wenn Sie die Gesamtkosten für ihre Funktions-App und der zugehörige Dienste abschätzen, verwenden Sie den Azure-Preisrechner.

Verwandte Kosten BESCHREIBUNG
Speicherkonto Für jede Funktions-App ist es erforderlich, dass Sie über ein zugeordnetes universelles Azure Storage-Konto verfügen, das gesondert abgerechnet wird. Dieses Konto wird von der Functions-Laufzeit intern verwendet, aber Sie können es auch für Storage-Trigger und -Bindungen verwenden. Wenn Sie kein Speicherkonto besitzen, wird mit der Erstellung der Funktions-App eins für Sie erstellt. Weitere Informationen finden Sie unter Speicherkontoanforderungen.
Application Insights Functions basiert auf Application Insights, um eine Hochleistungsüberwachungs-Erfahrung für Ihre Funktions-Apps bereitzustellen. Wenn dies auch nicht erforderlich ist, sollten Sie doch die Application Insights-Integration aktivieren. Monatlich ist eine kostenlose Zuweisung von Telemetriedaten enthalten. Weitere Informationen finden Sie auf der Seite mit der Preisübersicht für Azure Monitor.
Netzwerkbandbreite Je nach Richtung und Szenario der Datenverschiebung können Kosten für die Datenübertragung anfallen. Weitere Informationen finden Sie in den Bandbreitenpreisdetails.

Verhalten, die die Ausführungszeit beeinflussen

Die folgenden Verhalten Ihrer Funktionen können sich auf die Ausführungszeit auswirken:

  • Trigger und Bindungen: Die Zeit, die das Lesen von Eingaben aus Ihren und das Schreiben der Ausgaben in Ihre Funktionsbindungen benötigt, wird als Ausführungszeit gezählt. Wenn Ihre Funktion beispielsweise eine Ausgabenbindung verwendet, um eine Nachricht in eine Azure Storage-Warteschlange zu schreiben, beinhaltet Ihre Ausführungszeit die Zeit, die zum Schreiben der Nachricht in die Warteschlange benötigt wird, was in die Berechnung der Funktionskosten einfließt.

  • Asynchrone Ausführung: Die Zeit, die Ihre Funktion auf die Ergebnisse einer asynchronen Anforderung wartet (await in C#), wird als Ausführungszeit gezählt. Die GB-Sekunden-Berechnung basiert auf der Start- und Endzeit der Funktion und der Arbeitsspeichernutzung in diesem Zeitraum. Was im Verlauf dieses Zeitraums hinsichtlich der CPU-Aktivität geschieht, wird nicht in die Berechnung einbezogen. Sie können die Kosten möglicherweise während asynchroner Vorgänge verringern, indem Sie Durable Functions verwenden. In awaits verbrachte Zeit wird Ihnen für Orchestratorfunktionen nicht berechnet.

In Ihrer Rechnung können Sie die kostenbezogenen Daten Total Executions – Functions (Ausführungen gesamt) und Execution Time – Functions (Ausführungszeit) zusammen mit den tatsächlich abgerechneten Kosten sehen. Diese Rechnungsdaten stellen jedoch eine monatliche Aggregation für einen vergangenen Abrechnungszeitraum dar.

Metriken auf Ebene der Funktions-App

Um die Kostenauswirkungen Ihrer Funktionen besser zu verstehen, können Sie Azure Monitor verwenden, um kostenbezogene Metriken anzuzeigen, die von Ihren Funktions-Apps generiert werden.

Verwenden Sie den Azure Monitor-Metrik-Explorer, um kostenbezogene Daten für Ihre Funktions-Apps im Verbrauchstarif in einem grafischen Format anzuzeigen.

  1. Navigieren Sie im Azure-Portal zu Ihrer Funktions-App.

  2. Scrollen Sie im linken Bereich nach unten zu Überwachung, , und wählen Sie die Option Metriken aus.

  3. Wählen Sie in Metrik die Einträge Ausführungsanzahl für Funktion und Summe für Aggregation aus. Dadurch wird die Summe der Ausführungen während des gewählten Zeitraums dem Diagramm hinzugefügt.

    Definieren einer Funktions-App-Metrik, um sie dem Diagramm hinzuzufügen

  4. Wählen Sie Metrik hinzufügen aus, und wiederholen Sie die Schritte 2–4, um dem Diagramm Ausführungseinheiten für Funktion hinzuzufügen.

Das resultierende Diagramm enthält die Summen für beide Ausführungsmetriken im ausgewählten Zeitraum, der in diesem Fall zwei Stunden beträgt.

Diagramm der Funktionsausführungen und Ausführungseinheiten

Da die Anzahl der Ausführungseinheiten so viel höher ist, als die Ausführungen, zeigt das Diagramm nur die Ausführungseinheiten an.

Dieses Diagramm zeigt eine Gesamtzahl von 1,11 Mrd. Function Execution Units, die in einem Zeitraum von zwei Stunden verbraucht wurden, gemessen in MB-Millisekunden. Um den Wert in GB-Sekunden umzuwandeln, teilen Sie durch 1.024.000. In diesem Beispiel hat die Funktions-App 1110000000 / 1024000 = 1083.98 GB-Sekunden verbraucht. Sie können diesen Wert mit dem aktuellen Preis der Ausführungszeit auf der Seite mit den Preisen für Azure Functions multiplizieren, wodurch Sie die Kosten für diese zwei Stunden erhalten – vorausgesetzt, Sie haben bereits alle zugewiesenen kostenlosen Ausführungszeiten verbraucht.

Metriken auf Funktionsebene

Funktionsausführungseinheiten sind eine Kombination aus Ausführungszeit und Ihrer Speichernutzung, was diese zu einer schwierigen Metrik macht, um die Speichernutzung zu verstehen. Arbeitsspeicherdaten sind keine aktuell in Azure Monitor verfügbare Metrik. Wenn Sie jedoch die Speichernutzung Ihrer App optimieren möchten, können Sie die von Application Insights erfassten Daten der Leistungsindikatoren verwenden.

Falls noch nicht geschehen, aktivieren Sie Application Insights in Ihrer Funktions-App. Mit dieser aktivierten Integration können Sie diese Telemetriedaten im Portal abfragen.

Zum Abrufen der Metrikdaten von Azure Monitor können Sie entweder den Azure Monitor-Metrik-Explorer im Azure-Portal oder REST-APIs verwenden.

Arbeitsspeichernutzung ermitteln

Wählen Sie unter Überwachung den Eintrag Protokolle (Analytics) aus, kopieren Sie dann die folgende Telemetrieabfrage, fügen Sie sie in das Abfragefenster ein, und wählen Sie Ausführen aus. Diese Abfrage gibt die Gesamtarbeitsspeichernutzung zu jedem Stichprobenzeitpunkt zurück.

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

Die Ergebnisse sehen ungefähr wie folgt aus:

Zeitstempel [UTC] name value
12.9.2019, 1:05:14,947 Uhr Private Bytes 209.932.288
12.9.2019, 1:06:14,994 Uhr Private Bytes 212.189.184
12.9.2019, 1:06:30,010 Uhr Private Bytes 231.714.816
12.9.2019, 1:07:15,040 Uhr Private Bytes 210.591.744
12.9.2019, 1:12:16,285 Uhr Private Bytes 216.285.184
12.9.2019, 1:12:31,376 Uhr Private Bytes 235.806.720

Bestimmen der Dauer

Azure Monitor erfasst Metriken auf Ressourcenebene, wobei es sich für Functions um die Funktions-App handelt. Application Insights-Integration gibt Metriken pro Funktion aus. Im Folgenden finden Sie ein Beispiel für eine Analytics-Abfrage, mit der die durchschnittliche Dauer einer Funktion abgefragt wird:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16,087
QueueTrigger MaxDurationMs 90,249
QueueTrigger MinDurationMs 8,522

Nächste Schritte