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:
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 bei0.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 bei0.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
.
Andere verwandte Kosten
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.
Anzeigen von kostenbezogenen Daten
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.
Navigieren Sie im Azure-Portal zu Ihrer Funktions-App.
Scrollen Sie im linken Bereich nach unten zu Überwachung, , und wählen Sie die Option Metriken aus.
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.
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.
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 |