Dela via


Beräkna förbrukningsbaserade kostnader

Den här artikeln visar hur du beräknar plankostnader för både Flex Consumption-planen och den äldre förbrukningsplanen.

Välj det värdalternativ som bäst stöder funktions-, prestanda- och kostnadskraven för dina funktionskörningar. Mer information finns i Skala och hantera Azure Functions.

Den här artikeln fokuserar på de två förbrukningsplanerna eftersom faktureringen i dessa planer beror på aktiva exekveringsperioder i varje instans.

Ger snabb horisontell skalning, med flexibla beräkningsalternativ, integrering av virtuella nätverk och fullständigt stöd för anslutningar med Microsoft Entra-ID-autentisering. I den här planen skalar instanser ut dynamiskt baserat på konfigurerad samtidighet per instans, inkommande händelser och arbetsbelastningar per funktion för optimal effektivitet. Flex Consumption är den rekommenderade planen för serverlös värd. Mer information finns i Azure Functions Flex Consumption Plan hosting.

Durable Functions kan också köras i båda dessa planer. Mer information om kostnadsöverväganden när du använder Durable Functions finns i Durable Functions-fakturering.

Förbrukningsbaserade kostnader

Hur förbrukningsbaserade kostnader beräknas, inklusive kostnadsfria bidrag, beror på den specifika planen. Information om den senaste kostnaden och beviljandet finns på sidan med priser för Azure Functions.

Det finns två lägen där dina kostnader bestäms när du kör dina appar i Flex Consumption-planen. Varje läge bestäms per instans.

Faktureringsläge beskrivning
På begäran När du kör i läget på begäran debiteras du endast under den tid som funktionskoden körs på dina tillgängliga instanser. I läget på begäran krävs inget minsta antal instanser. Du debiteras för:

• Den totala mängden minne som etablerats medan varje instans på begäran aktivt kör funktioner (i GB-sekunder), minus ett kostnadsfritt beviljande av GB per månad.
• Det totala antalet körningar, minus ett kostnadsfritt bidrag (antal) körningar per månad.
Alltid redo Du kan konfigurera en eller flera instanser, tilldelade till specifika utlösartyper (HTTP/Durable/Blob) och enskilda funktioner, som alltid är tillgängliga för att hantera begäranden. När du har aktiverat alla alltid redo instanser debiteras du för:

• Den totala mängden minne som har etablerats för alla dina alltid klara instanser, så kallad baslinje (i GB-sekunder).
• Den totala mängden minne som har etablerats under den tid då varje alltid redo instans aktivt kör funktioner (i GB-sekunder).
• Det totala antalet körningar.

I alltid redo fakturering finns det inga kostnadsfria bidrag.

Den senaste informationen om körningspriser, alltid redo baslinjekostnader och kostnadsfria bidrag för körningar på begäran finns på prissättningssidan för Azure Functions.

Det här diagrammet visar hur kostnader på begäran fastställs i den här planen:

Diagram över kostnader för Flex Consumption plan on-demand baserat på både belastning (instansantal) och tid.

Förutom körningstiden betalar du en lägre baslinjesats för antalet alltid redo instanser som du underhåller när du använder en eller flera alltid redo instanser. Körningstiden för alltid redo instanser kan vara billigare än körningstid på instanser med körning på begäran.

Viktigt!

Den här artikeln använder priser på begäran för att hjälpa dig att förstå exempelberäkningar. Kontrollera alltid de aktuella kostnaderna på prissättningssidan för Azure Functions när du beräknar kostnader som du kan medföra när du kör dina funktioner i Flex Consumption-planen.

Överväg en funktionsapp som bara har HTTP-utlösare med dessa grundläggande fakta:

  • HTTP-utlösare hanterar 40 konstanta begäranden per sekund.
  • HTTP-utlösare hanterar 10 samtidiga begäranden.
  • Minnesstorleken för instansen är 2 048 MB.
  • Du konfigurerar inga alltid redo instanser, vilket innebär att appen kan skalas till noll.

I en situation som denna beror prissättningen mer på vilken typ av arbete som utförs under körningen av koden. Nu ska vi titta på två arbetsbelastningsscenarier:

  • CPU-bunden arbetsbelastning: I en CPU-bunden arbetsbelastning finns det ingen fördel med att bearbeta flera begäranden parallellt i samma instans. Den här begränsningen innebär att du är bättre på att distribuera varje begäran till sin egen instans så att begäranden slutförs så snabbt som möjligt utan konkurrens. I det här scenariot anger du en låg HTTP-utlösarkonkurritet1. Med 10 samtidiga begäranden skalas appen till ett stabilt tillstånd på ungefär 10 instanser, och varje instans bearbetar kontinuerligt en begäran i taget.

    Eftersom storleken på varje instans är ~2 GB är 2 GB * 3600 s = 7200 GB-sförbrukningen för en enda kontinuerligt aktiv instans . Om vi antar en exekveringsfrekvens på begäran på $0,000026 GB-s (utan några kostnadsfria bidrag) blir $0.1872 USD kostnaden per timme per instans. Eftersom den CPU-bundna appen skalar till 10 instanser är $1.872 USD den totala timhastigheten.

    På samma sätt är kostnaden per körning på begäran (utan kostnadsfria bidrag) på 40 begäranden per sekund lika 40 * 3600 = 144,000 med eller 0.144 million körningar per timme. Om vi antar en frekvens $0.40 på begäran på per miljon körningar är 0.144 * $0.40den totala (kostnadsfria) timkostnaden för körningar , vilket är $0.0576 per timme.

    I det här scenariot är $1.872 + $0.0576s = $1.9296 USDden totala timkostnaden för att köra på begäran på 10 instanser .

  • I/O-bunden arbetsbelastning: I en I/O-bunden arbetsbelastning ägnas större delen av programtiden åt att vänta på inkommande begäran, vilket kan begränsas av nätverkets dataflöde eller andra överordnade faktorer. På grund av de begränsade indata kan koden bearbeta flera åtgärder samtidigt utan negativa effekter. I det här scenariot antar du att du kan bearbeta alla tio samtidiga begäranden på samma instans.

    Eftersom förbrukningsavgifter endast baseras på minnet för varje aktiv instans är beräkningen av förbrukningsavgiften helt enkelt 2 GB * 3600 s = 7200 GB-s, som enligt den antagna körningstakten på begäran (utan några kostnadsfria bidrag tillämpas) per $0.1872 USD timme för den enskilda instansen.

    Precis som i det CPU-bundna scenariot är kostnaden per körning på begäran (utan kostnadsfria bidrag) på 40 begäranden per sekund lika 40 * 3600 = 144,000 med eller 0,144 miljoner körningar per timme. I det här fallet den totala (kostnadsfria) timkostnaden för körningar 0.144 * $0.40, vilket är $0.0576 per timme.

    I det här scenariot är $0.1872 + $0.0576 = $0.245 USD den totala kostnaden per timme för att köra en enskild instans på begäran.

Beteenden som påverkar körningstiden

Följande funktioners beteende kan påverka körningstiden:

  • Utlösare och bindningar: Den tid det tar att läsa indata från och skriva utdata till dina funktionsbindningar räknas som körningstid. När din funktion till exempel använder en utdatabindning för att skriva ett meddelande till en Azure-lagringskö inkluderar körningstiden den tid det tar att skriva meddelandet till kön, vilket ingår i beräkningen av funktionskostnaden.

  • Asynkron körning: Den tid som funktionen väntar på resultatet av en asynkron begäran (await i C#) räknas som körningstid. GB-sekundersberäkningen baseras på start- och sluttiden för funktionen och minnesanvändningen under den perioden. Vad som händer under den tiden när det gäller CPU-aktivitet räknas inte in i beräkningen. Du kanske kan minska kostnaderna under asynkrona åtgärder med hjälp av Durable Functions. Du debiteras inte för tid som ägnas åt väntan i orkestreringsfunktioner.

Visa och uppskatta kostnader från mått

din faktura kan du visa kostnadsrelaterade data tillsammans med de faktiska fakturerade kostnaderna. Dessa fakturadata är dock en månatlig aggregering för en tidigare fakturaperiod.

Det här avsnittet visar hur du använder mått, både appnivå- och funktionskörningar, för att beräkna kostnaderna för att köra dina funktionsappar.

Funktionsmått på appnivå

Vilka mått på appnivå som är tillgängliga för din app beror på vilken typ av förbrukningsplan du använder.

Dessa Azure Monitor-mått är relaterade till fakturering av flexförbrukningsplan:

Mätvärde beskrivning Mätarberäkning
Antal funktionsutföranden vid behov Totalt antal funktionskörningar i instanser på begäran. OnDemandFunctionExecutionCount relaterar till mätaren antal totala körningar på begäran.
Antal always ready-funktionskörningar Totalt antal funktionskörningar i alltid redo-instans. AlwaysReadyFunctionExecutionCount relaterar till Alltid redo total executions-mätaren.
Exekveringsenheter för funktioner på begäran Totalt antal MB-millisekunder från instanser på begäran samtidigt som funktioner körs aktivt. OnDemandFunctionExecutionUnits / 1,024,000 är mätaren för exekveringstid på begäran, angiven i GB-sekunder.
Enheter för Always Ready-funktionskörning Totalt antal MB-millisekunder från alltid redo instanser samtidigt som funktioner körs aktivt. AlwaysReadyFunctionExecutionUnits / 1,024,000 är Always Ready Execution Time-mätaren i GB-sekunder.
Alltid Redo-enheter Det totala antalet MB-millisekunder av alltid klara instanser som tilldelats appen, oavsett om funktioner körs aktivt eller inte. AlwaysReadyUnits / 1,024,000 är Always Ready Baseline-indikatorn uttryckt i GB-sekunder.

Mer information finns i Referens för Azure Functions-övervakningsdata.

För att bättre förstå kostnaderna för dina funktioner använder du Azure Monitor för att visa kostnadsrelaterade mått som dina funktionsappar genererar. Du kan visa Monitor-mått med något av följande verktyg:

Använd Azure Monitor Metrics Explorer för att visa kostnadsrelaterade data för dina funktionsappar för Flex Consumption Plan i ett grafiskt format.

  1. Gå till funktionsappen i Azure Portal.

  2. I den vänstra panelen rullar du ned till Övervakning och väljer Mått.

  3. Från Metric väljer du Antal funktionskörningar på begäran och Summa för Aggregering. Det här valet lägger till summan av antalet körningar under den valda perioden till diagrammet.

  4. Välj Lägg till mått och lägg till Exekveringsenheter för funktionen på begäran, Exekveringsantal för Always Ready-funktion, Exekveringsenheter för Always Ready-funktion, och Always Ready-enheter i diagrammet.

Det resulterande diagrammet innehåller summorna för alla flexförbrukningskörningsmått i det valda tidsintervallet, vilket i det här exemplet är ett anpassat tidsintervall.

Diagram över antalet körningar av funktioner på begäran och körningsenheter för funktioner på begäran.

Eftersom antalet On Demand Function Execution Units är större än On Demand Function Execution Count och det inte fanns några alltid redo instanser på appen, visar diagrammet bara On Demand Function Execution Units.

Det här diagrammet visar totalt 3,54 miljarder On Demand Function Execution Units förbrukade under en 16-minuters period, mätt i MB-millisekunder. Om du vill konvertera till GB-sekunder delar du med 1 024 000. I det här exemplet förbrukade funktionsappen 3,540,000,000 / 1,024,000 = 3,457.03 GB-sekunder. Du kan ta det här värdet och multiplicera det med det aktuella priset för "Körtid på begäran" på sidan Functions-priser, vilket ger dig kostnaden för dessa 16 minuter, förutsatt att du redan har använt eventuella kostnadsfria exekveringstillfällen. Du kan använda samma beräkning med måttet Always Ready Function Execution Units och faktureringsmätaren Always Ready Execution Time, samt med måttet Always Ready Units och faktureringsmätaren Always Ready Baseline, för att ta reda på gb-sekunderskostnaderna för alltid redo instanser.

Om du vill beräkna kostnaden för totala körningar på begäran tar du summan av antalet funktionskörningar på begäran för samma tidsperiod, omvandlar till miljontal och multiplicerar sedan med priset för totala körningar på begäran på sidan Funktioners prissättning. Till exempel konverteras 2 100 körningar i exemplet ovan till 0.0021 miljoner körningar. Du kan använda samma beräkning med måttet Always Ready Function Execution Count och faktureringsmätaren Always Ready Total Executions för att ta reda på kostnaden för körningar som hanteras av en alltid redo instans.

Mått på funktionsnivå

Minnesanvändning är viktig när du beräknar kostnaderna för dina funktionskörningar. Hur minnesanvändningen påverkar dina kostnader beror dock på den specifika plantypen:

I Flex Consumption-planen betalar du för den tid som instansen körs baserat på din valda instansstorlek, som har en angiven minnesgräns. Mer information finns i Fakturering.

Om du inte redan har gjort det aktiverar du Application Insights i funktionsappen. Med den här integreringen aktiverad kan du köra frågor mot dessa telemetridata i portalen.

Du kan använda azure monitor-måttutforskareni Azure Portal- eller REST-API:er för att hämta data för övervakningsmått.

Fastställa minnesanvändning

Under Övervakning väljer du Loggar (Analys), kopierar sedan följande telemetrifråga och klistrar in den i frågefönstret och väljer Kör. Den här frågan returnerar den totala minnesanvändningen vid varje sampeltillfälle.

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

Resultatet ser ut som i följande exempel:

tidsstämpel [UTC] namn värde
2019-09-12, 01:05:14.947 Privata byte 209,932,288
2019-09-12, 01:06:14.994 Privata byte 212,189,184
2019-09-12, 01:06:30.010 Privata byte 231,714,816
2019-09-12, 01:07:15.040 Privata byte 210,591,744
2019-09-12, 01:12:16.285 Privata byte 216,285,184
2019-09-12, 01:12:31.376 Privata byte 235,806,720

Fastställa varaktighet

Azure Monitor spårar mått på resursnivå, vilket för Functions är funktionsappen. Application Insights-integrering genererar mått per funktion. Här är ett exempel på en analysfråga för att få den genomsnittliga varaktigheten för en funktion:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
namn genomsnittligVaraktighetMillisekunder
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

När du beräknar den totala kostnaden för att köra dina funktioner i en plan bör du komma ihåg att Functions-körningen använder flera andra Azure-tjänster, som var och en faktureras separat. När du beräknar prissättningen för funktionsappar kräver alla utlösare och bindningar som du har som integreras med andra Azure-tjänster att du skapar och betalar för dessa andra tjänster.

För funktioner som körs i en förbrukningsplan är den totala kostnaden körningskostnaden för dina funktioner, plus kostnaden för bandbredd och andra tjänster.

När du beräknar de totala kostnaderna för din funktionsapp och relaterade tjänster använder du Priskalkylatorn för Azure.

Relaterad kostnad beskrivning
Lagringskonto Varje funktionsapp kräver att du har en associerad Generell användning Azure Storage-konto, som faktureras separat. Det här kontot används internt av Functions-körningen, men du kan också använda det för Storage-utlösare och bindningar. Om du inte har något lagringskonto skapas ett åt dig när funktionsappen skapas. Mer information finns i Krav för lagringskonto.
Application Insights Functions förlitar sig på Application Insights för att tillhandahålla en övervakningsupplevelse med höga prestanda för dina funktionsappar. Även om det inte krävs bör du aktivera Application Insights-integrering. Ett kostnadsfritt beviljande av telemetridata ingår varje månad. Mer information finns på prissättningssidan för Azure Monitor.
Nätverksbandbredd Du kan medföra kostnader för dataöverföring beroende på riktningen och scenariot för dataflytten. Mer information finns i Prisinformation om bandbredd.

Nästa steg