Estimativa de custos baseados no consumo
Este artigo mostra como estimar os custos do plano para os planos de hospedagem Flex Consumption e Consumption.
Atualmente, o Azure Functions oferece essas diferentes opções de hospedagem para seus aplicativos de função, com cada opção tendo seu próprio modelo de preço de plano de hospedagem:
Plano | Descrição |
---|---|
Plano de consumo Flex | Você paga pelo tempo de execução nas instâncias em que suas funções estão sendo executadas, além de todas as instâncias sempre prontas . As instâncias são adicionadas e removidas dinamicamente com base no número de eventos de entrada. Este é o plano de escala dinâmica recomendado, que também suporta a integração de rede virtual. |
Premium | Fornece os mesmos recursos e mecanismo de dimensionamento do plano de consumo, mas com desempenho aprimorado e integração de rede virtual. O custo é baseado no nível de preço escolhido. Para saber mais, consulte Plano Premium do Azure Functions. |
Dedicado (Serviço de Aplicativo) (nível básico ou superior) |
Quando precisar executar em VMs dedicadas ou isoladamente, use imagens personalizadas ou queira usar a capacidade excedente do plano do Serviço de Aplicativo. Usa a cobrança regular do plano do Serviço de Aplicativo. O custo é baseado no nível de preço escolhido. |
Aplicativos de contêiner | Crie e implante aplicativos de função em contêineres em um ambiente totalmente gerenciado hospedado pelos Aplicativos de Contêiner do Azure, que permite executar suas funções ao lado de outros microsserviços, APIs, sites e fluxos de trabalho como programas hospedados em contêiner. |
Consumo | Você só será cobrado pelo tempo que seu aplicativo de função for executado. Este plano inclui uma subvenção gratuita por subscrição. |
Você deve sempre escolher a opção que melhor suporta os requisitos de recurso, desempenho e custo para suas execuções de função. Para saber mais, consulte Dimensionamento e hospedagem do Azure Functions.
Este artigo se concentra nos planos Flex Consumption e Consumption porque nesses planos o faturamento depende de períodos ativos de execuções dentro de cada instância.
As funções duráveis também podem ser executadas em ambos os planos. Para saber mais sobre as considerações de custo ao usar funções duráveis, consulte Faturamento de funções duráveis.
Custos baseados no consumo
A forma como os custos baseados no consumo são calculados, incluindo as subvenções gratuitas, depende do plano específico. Para obter as informações mais atuais sobre custos e concessão, consulte a página de preços do Azure Functions.
Há dois modos pelos quais seus custos são determinados ao executar seus aplicativos no plano Flex Consumption. Cada modo é determinado por instância.
Modo de faturação | Description |
---|---|
Sob Demanda | Ao executar no modo sob demanda , você é cobrado apenas pela quantidade de tempo que o código da função está sendo executado em suas instâncias disponíveis. No modo sob demanda, nenhuma contagem mínima de instâncias é necessária. Você é cobrado por: • A quantidade total de memória provisionada enquanto cada instância sob demanda está executando ativamente funções (em GB-segundos), menos uma concessão gratuita de GB-s por mês. • O número total de execuções, menos uma concessão gratuita (número) de execuções por mês. |
Sempre pronto | Você pode configurar uma ou mais instâncias, atribuídas a tipos de gatilho específicos (HTTP/Durable/Blob) e funções individuais, que estão sempre disponíveis para lidar com solicitações. Quando você tiver instâncias sempre prontas habilitadas, será cobrado por: • A quantidade total de memória provisionada em todas as suas instâncias sempre prontas, conhecida como linha de base (em GB-segundos). • A quantidade total de memória provisionada durante o tempo em que cada instância sempre pronta está executando ativamente funções (em GB-segundos). • O número total de execuções. Na faturação sempre pronta, não há subvenções gratuitas. |
Para obter as informações mais atualizadas sobre preços de execução, custos de linha de base sempre prontos e concessões gratuitas para execuções sob demanda, consulte a página de preços do Azure Functions.
Este diagrama representa como os custos sob demanda são determinados neste plano:
Além do tempo de execução, ao usar uma ou mais instâncias sempre prontas, você também é cobrado a uma taxa de linha de base mais baixa para o número de instâncias sempre prontas que mantém. O tempo de execução para instâncias sempre prontas pode ser mais barato do que o tempo de execução em instâncias com execução sob demanda.
Importante
Neste artigo, os preços sob demanda são usados para ajudar a entender cálculos de exemplo. Sempre verifique os custos atuais na página de preços do Azure Functions ao estimar os custos que você pode incorrer ao executar suas funções no plano Flex Consumption.
Considere um aplicativo de função que é composto apenas de gatilhos HTTP com e estes fatos básicos:
- Os gatilhos HTTP lidam com 40 solicitações constantes por segundo.
- Os gatilhos HTTP lidam com 10 solicitações simultâneas.
- A configuração de tamanho da memória da instância é
2048 MB
. - Não há instâncias sempre prontas configuradas, o que significa que o aplicativo pode ser dimensionado para zero.
Em uma situação como essa, o preço depende mais do tipo de trabalho que está sendo feito durante a execução do código. Vejamos dois cenários de carga de trabalho:
Carga de trabalho vinculada à CPU: em uma carga de trabalho vinculada à CPU, não há vantagem em processar várias solicitações em paralelo na mesma instância. Isso significa que é melhor distribuir cada solicitação para sua própria instância para que as solicitações sejam concluídas o mais rápido possível sem contenção. Nesse cenário, você deve definir uma simultaneidade de gatilho HTTP baixa de
1
. Com 10 solicitações simultâneas, o aplicativo é dimensionado para um estado estável de aproximadamente 10 instâncias, e cada instância está continuamente ativa processando uma solicitação de cada vez.Como o tamanho de cada instância é de ~2 GB, o consumo de uma única instância continuamente ativa é
2 GB * 3600 s = 7200 GB-s
, que na taxa de execução sob demanda assumida (sem concessões gratuitas aplicadas) é$0.1152 USD
por hora por instância. Como o aplicativo vinculado à CPU é dimensionado para 10 instâncias, a taxa horária total para o tempo de execução é$1.152 USD
.Do mesmo modo, a taxa de execução a pedido (sem subvenções gratuitas) de 40 pedidos por segundo equivale a
40 * 3600 = 144,000
ou 0,144 milhões de execuções por hora. O custo horário total (sem subvenções) das execuções é então0.144 * $0.20
, que é$0.0288
por hora.Nesse cenário, o custo horário total da execução sob demanda em 10 instâncias é
$1.152 + $0.0288 = $1.1808 USD
.Carga de trabalho vinculada a E/S: em uma carga de trabalho vinculada a E/S, a maior parte do tempo do aplicativo é gasto aguardando a solicitação de entrada, que pode ser limitada pela taxa de transferência da rede ou outros fatores upstream. Devido às entradas limitadas, o código pode processar várias operações simultaneamente sem impactos negativos. Nesse cenário, suponha que você possa processar todas as 10 solicitações simultâneas na mesma instância.
Como os encargos de consumo são baseados apenas na memória de cada instância ativa, o cálculo da taxa de consumo é simplesmente
2 GB * 3600 s = 7200 GB-s
, que na taxa de execução assumida sob demanda (sem quaisquer concessões gratuitas aplicadas) é$0.1152 USD
por hora para a instância única.Como no cenário vinculado à CPU, a taxa de execução sob demanda (sem concessões gratuitas) de 40 solicitações por segundo é igual a
40 * 3600 = 144,000
ou 0,144 milhão de execuções por hora. Neste caso, o custo horário total (sem subvenções) das execuções0.144 * $0.20
, que é$0.0288
por hora.Nesse cenário, o custo horário total da execução sob demanda em uma única instância é
$0.1152 + $0.0288 = $0.144 USD
.
Outros custos conexos
Ao estimar o custo geral da execução de suas funções em qualquer plano, lembre-se de que o tempo de execução do Functions usa vários outros serviços do Azure, cada um cobrado separadamente. Quando você estima preços para aplicativos de função, quaisquer gatilhos e associações que você tenha que se integrem a outros serviços do Azure exigem que você crie e pague por esses outros serviços.
Para funções executadas em um plano de consumo, o custo total é o custo de execução de suas funções, mais o custo de largura de banda e outros serviços.
Ao estimar os custos gerais do seu aplicativo de função e serviços relacionados, use a calculadora de preços do Azure.
Custos relacionados | Description |
---|---|
Conta de armazenamento | Cada aplicativo de função requer que você tenha uma conta de Armazenamento do Azure de Uso Geral associada, que é cobrada separadamente. Essa conta é usada internamente pelo tempo de execução do Functions, mas você também pode usá-la para gatilhos e associações de armazenamento. Se você não tiver uma conta de armazenamento, uma será criada para você quando o aplicativo de função for criado. Para saber mais, consulte Requisitos da conta de armazenamento. |
Application Insights | O Functions depende do Application Insights para fornecer uma experiência de monitoramento de alto desempenho para seus aplicativos funcionais. Embora não seja necessário, você deve habilitar a integração do Application Insights. Uma concessão gratuita de dados de telemetria é incluída todos os meses. Para saber mais, consulte a página de preços do Azure Monitor. |
Largura de banda da rede | Você pode incorrer em custos de transferência de dados dependendo da direção e do cenário da movimentação de dados. Para saber mais, consulte Detalhes de preços de largura de banda. |
Comportamentos que afetam o tempo de execução
Os seguintes comportamentos de suas funções podem afetar o tempo de execução:
Gatilhos e ligações: O tempo necessário para ler a entrada e gravar a saída para suas ligações de função é contado como tempo de execução. Por exemplo, quando sua função usa uma associação de saída para gravar uma mensagem em uma fila de armazenamento do Azure, seu tempo de execução inclui o tempo necessário para gravar a mensagem na fila, que é incluído no cálculo do custo da função.
Execução assíncrona: o tempo que sua função aguarda os resultados de uma solicitação assíncrona (
await
em C#) é contado como tempo de execução. O cálculo de GB-segundo é baseado na hora de início e término da função e no uso de memória durante esse período. O que está acontecendo ao longo desse tempo em termos de atividade da CPU não é levado em conta no cálculo. Talvez seja possível reduzir os custos durante operações assíncronas usando funções duráveis. Você não é cobrado pelo tempo gasto em funções de orquestrador.
Visualização de dados relacionados a custos
Na sua fatura, você pode visualizar os dados relacionados ao custo de Total de Execuções - Funções e Tempo de Execução - Funções, juntamente com os custos reais faturados. No entanto, esses dados de fatura são um agregado mensal de um período de fatura passado.
Métricas de nível de aplicativo de função
Para entender melhor os custos de suas funções, você pode usar o Azure Monitor para exibir métricas relacionadas a custos que estão sendo geradas atualmente por seus aplicativos de função.
Use o explorador de métricas do Azure Monitor para exibir dados relacionados a custos para seus aplicativos de função Plano de consumo em um formato gráfico.
No portal do Azure, navegue até seu aplicativo de função.
No painel esquerdo, role para baixo até Monitoramento e escolha Métricas.
Em Metric, escolha Contagem de execução de função e Soma para agregação. Isso adiciona a soma das contagens de execução durante o período escolhido ao gráfico.
Selecione Adicionar métrica e repita as etapas 2 a 4 para adicionar Unidades de Execução de Função ao gráfico.
O gráfico resultante contém os totais para ambas as métricas de execução no intervalo de tempo escolhido, que neste caso é de duas horas.
Como o número de unidades de execução é muito maior do que a contagem de execução, o gráfico mostra apenas as unidades de execução.
Este gráfico mostra um total de 1,11 bilhão Function Execution Units
consumido em um período de duas horas, medido em MB-milissegundos. Para converter em GB-segundos, divida por 1024000. Neste exemplo, o aplicativo de função consumiu 1110000000 / 1024000 = 1083.98
GB-segundos. Você pode pegar esse valor e multiplicar pelo preço atual do tempo de execução na página de preços Funções, que lhe dá o custo dessas duas horas, supondo que você já tenha usado quaisquer concessões gratuitas de tempo de execução.
Métricas de nível de função
As unidades de execução de função são uma combinação de tempo de execução e seu uso de memória, o que torna uma métrica difícil para entender o uso de memória. Os dados de memória não são uma métrica atualmente disponível através do Azure Monitor. No entanto, se você quiser otimizar o uso de memória do seu aplicativo, pode usar os dados do contador de desempenho coletados pelo Application Insights.
Se você ainda não tiver feito isso, habilite o Application Insights em seu aplicativo de função. Com essa integração habilitada, você pode consultar esses dados de telemetria no portal.
Você pode usar o explorador de métricas do Azure Monitor no portal do Azure ou APIs REST para obter dados do Monitor Metrics.
Determinar o uso da memória
Em Monitoramento, selecione Logs (Analytics), copie a seguinte consulta de telemetria e cole-a na janela de consulta e selecione Executar. Esta consulta retorna o uso total de memória em cada momento amostrado.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Os resultados são semelhantes ao exemplo a seguir:
carimbo de data/hora [UTC] | nome | valor |
---|---|---|
12/09/2019, 01:05:14.947 | Bytes privados | 209,932,288 |
12/09/2019, 01:06:14.994 | Bytes privados | 212,189,184 |
12/09/2019, 01:06:30.010 | Bytes privados | 231,714,816 |
12/09/2019, 01:07:15.040 | Bytes privados | 210,591,744 |
12/09/2019, 01:12:16.285 | Bytes privados | 216,285,184 |
12/09/2019, 01:12:31.376 | Bytes privados | 235,806,720 |
Determinar a duração
O Azure Monitor rastreia métricas no nível de recurso, que para o Functions é o aplicativo de função. A integração do Application Insights emite métricas por função. Aqui está um exemplo de consulta de análise para obter a duração média de uma função:
customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
nome | médiaDuraçãoMilésimos de segundo |
---|---|
QueueTrigger AvgDurationMs | 16.087 |
QueueTrigger MaxDurationMs | 90.249 |
QueueTrigger MinDurationMs | 8.522 |