Como estimar os custos do plano de Consumo

Atualmente, há três tipos de planos de hospedagem para um aplicativo que é executado no Azure Functions, cada plano com seu próprio modelo de preços:

Planejar Descrição
Consumo Você é cobrado apenas pelo tempo em que seu aplicativo de funções é executado. Esse plano inclui uma página de preços de [concessão gratuita] com base em cada assinatura.
Premium Fornece os mesmos recursos e mecanismo de colocação em escala que o plano de Consumo, mas com o desempenho aprimorado e acesso à VNET. O custo é baseado no tipo de preço escolhido. Para saber mais, confira Plano Premium do Azure Functions.
Dedicado (Serviço de Aplicativo)
(camada básica ou superior)
Quando você precisa executar em VMs dedicadas ou isoladamente, usar imagens personalizadas ou deseja usar o excesso de capacidade do Plano do Serviço de Aplicativo. Usa a cobrança regular do Plano do Serviço de Aplicativo. O custo é baseado no tipo de preço escolhido.

Você escolheu o plano que melhor dá suporte aos requisitos de desempenho e custo de sua função. Para saber mais, confira Escala e hospedagem do Azure Functions.

Este artigo lida apenas com o plano de Consumo, pois esse plano resulta em custos variáveis. Este artigo substitui o artigo Perguntas frequentes sobre cobrança de custos do plano de Consumo.

As Durable Functions também podem ser executadas em um plano de Consumo. Para saber mais sobre as considerações de custo ao usar o Durable Functions, confira Cobrança das Durable Functions.

Custos de plano de consumo

O custo de execução de uma única execução de função é medido em GB-segundos. O custo de execução é calculado pela combinação do respectivo uso de memória com o respectivo tempo de execução. Uma função que é executada por mais tempo custa mais, bem como uma função que consome mais memória.

Considere um caso em que a quantidade de memória usada pela função permaneça constante. Nesse caso, o cálculo do custo é uma multiplicação simples. Por exemplo, digamos que sua função consumiu 0,5 GB por 3 segundos. O custo de execução seria 0.5GB * 3s = 1.5 GB-seconds.

Como o uso de memória muda ao longo do tempo, o cálculo é basicamente o integral do uso de memória ao longo do tempo. O sistema faz esse cálculo por meio da amostragem do uso de memória do processo (juntamente com processos filho) em intervalos regulares. Conforme mencionado na página de preços, o uso de memória é arredondado para o bucket de 128 MB mais próximo. Quando seu processo estiver usando 160 MB, você será cobrado por 256 MB. O cálculo leva em conta a simultaneidade de contas, que é várias execuções de função simultâneas no mesmo processo.

Observação

Embora o uso da CPU não seja considerado diretamente no custo de execução, ele pode ter um impacto no custo quando afeta o tempo de execução da função.

Para uma função disparada por HTTP, quando um erro ocorre antes de o código da função começar a ser executado, você não será cobrado por uma execução. Isso significa que 401 respostas da plataforma devido à validação da chave de API ou ao recurso de Autenticação/Autorização do Serviço de Aplicativo não contam no seu custo de execução. Da mesma forma, as respostas de código de status 5xx não são contadas quando ocorrem na plataforma antes de uma função processar a solicitação. Uma resposta 5xx gerada pela plataforma após o início da execução do código de função ainda é contada como uma execução, mesmo que o erro não seja gerado pelo seu código de função.

Ao estimar o custo geral da execução de suas funções em algum plano, lembre-se de que o tempo de execução do Functions usa vários outros serviços do Azure, cada um cobrado separadamente. Ao calcular os preços dos aplicativos de funções, os gatilhos e as associações que se integram a outros serviços do Azure exigem que você crie e pague por esses serviços adicionais.

Para funções em execução em um plano de Consumo, o custo total é o custo de execução de suas funções mais o custo da largura de banda e de serviços adicionais.

Ao estimar os custos gerais do seu aplicativo de funções e dos serviços relacionados, use a calculadora de preços do Azure.

Custo relacionado Descrição
Conta de armazenamento Cada aplicativo de funções requer que você tenha uma conta de Armazenamento do Microsoft 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 do Armazenamento. Se não tiver uma conta de armazenamento, uma será criada para você quando o aplicativo de funções for criado. Para saber mais, confira Requisitos de uma conta de armazenamento.
Application Insights As funções dependem do Application insights para fornecer uma experiência de monitoramento de alto desempenho em seus aplicativos de funções. 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, confira a página de preços do Azure Monitor.
Largura de banda da rede Você não paga pela transferência de dados entre os serviços do Azure na mesma região. No entanto, você pode incorrer em custos para transferências de dados de saída para outra região ou para fora do Azure. Para saber mais, confira 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 associações: o tempo que leva para ler entradas e gravar saídas de suas associações de funções é 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, o tempo de execução inclui o tempo necessário para gravar a mensagem na fila, que está incluído no cálculo do custo da função.

  • Execução assíncrona o tempo que sua função aguarda pelos resultados de uma solicitação assíncrona (await em C#) é contado como tempo de execução. O cálculo de GB por segundo é baseado na hora de início e de término da função e no uso de memória nesse período. O que acontece nesse tempo em termos de atividade de CPU não é acrescentado ao cálculo. Talvez seja possível reduzir os custos durante operações assíncronas usando as Durable Functions. Você não é cobrado pelo tempo gasto em espera em funções de orquestrador.

Na sua fatura, você pode exibir os dados relacionados ao custo de Execuções Totais - Functions e Tempo de Execução - Functions, juntamente com os custos de cobrança reais. No entanto, esses dados da fatura são uma agregação mensal de um período de fatura anterior.

Métricas no nível do aplicativo de função

Para entender melhor o impacto de custos de suas funções, você pode usar o Azure Monitor para exibir as métricas de custo que estão sendo geradas atualmente por seus aplicativos de funções.

Use o Azure Monitor Metrics Explorer para exibir dados relacionados ao custo de seus aplicativos de função do plano de Consumo em um formato gráfico.

  1. No portal do Azure, navegue até o aplicativo de funções.

  2. No painel esquerdo, role para baixo até Monitoramento e escolha Métricas.

  3. Em Métrica, escolha Contagem de Execuções 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.

    Definir uma métrica de aplicativo de funções para adicionar ao gráfico

  4. 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 nesse caso é de duas horas.

Grafo de contagens de execução de função e unidades de execução

Como o número de unidades de execução é muito maior do que a contagem de execuções, o gráfico mostra apenas as unidades de execução.

Esse gráfico mostra um total de 1,11 bilhão de Function Execution Units consumidas 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ções consumiu 1110000000 / 1024000 = 1083.98 GB-segundos. Você pode usar esse valor e multiplicar pelo preço atual do tempo de execução na página de preços do Functions, que mostra o custo dessas duas horas, supondo que você já tenha usado alguma concessão gratuita de tempo de execução.

Métricas no nível da 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 a torna uma métrica difícil para entender o uso de memória. No momento, os dados de memória não são uma métrica disponível no Azure Monitor. No entanto, caso queira otimizar o uso de memória de seu aplicativo, será possível 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ções. Com essa integração habilitada, você pode consultar esses dados de telemetria no portal.

Você pode usar o Azure Monitor Metrics Explorer no [portal do Azure] ou APIs REST para obter dados de Métrica do Monitor.

Determinar o uso de memória flash

Em Monitoramento, selecione Logs (análise) , em seguida, copie a seguinte consulta de telemetria e cole-a na janela de consulta e selecione Executar. Essa consulta retorna o uso de memória total em cada tempo de amostra.

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

Os resultados são similares ao exemplo a seguir:

carimbo de data/hora [UTC] name value
9/12/2019, 1:05:14.947 AM Bytes Particulares 209.932.288
9/12/2019, 1:06:14.994 AM Bytes Particulares 212.189.184
9/12/2019, 1:06:30.010 AM Bytes Particulares 231.714.816
9/12/2019, 1:07:15.040 AM Bytes Particulares 210.591.744
9/12/2019, 1:12:16.285 AM Bytes Particulares 216.285.184
9/12/2019, 1:12:31.376 AM Bytes Particulares 235.806.720

Determinar duração

Azure Monitor acompanha as métricas no nível de recurso, o que, para Functions, é o aplicativo de funções. A integração do Application Insights emite métricas de acordo com a 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
name averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

Próximas etapas