Estimación de los costos según el plan de consumoEstimating Consumption plan costs

Actualmente hay tres tipos de planes de hospedaje para una aplicación que se ejecuta en Azure Functions, donde cada plan tiene su propio modelo de precios:There are currently three types of hosting plans for an app that runs in Azure Functions, with each plan having its own pricing model:

PlanPlan DescripciónDescription
ConsumoConsumption Solo se le cobrará por el tiempo que se ejecute la aplicación de funciones.You're only charged for the time that your function app runs. Este plan incluye una concesión gratuita por suscripción.This plan includes a free grant on a per subscription basis.
PremiumPremium Proporciona las mismas características y mecanismo de escalado que el plan de consumo, pero con un rendimiento mejorado y acceso a redes virtuales.Provides you with the same features and scaling mechanism as the Consumption plan, but with enhanced performance and VNET access. El costo se basa en el plan de tarifa elegido.Cost is based on your chosen pricing tier. Para más información, consulte Plan Premium de Azure Functions.To learn more, see Azure Functions Premium plan.
Dedicado (App Service)Dedicated (App Service)
(nivel básico o superior)(basic tier or higher)
Cuando necesite ejecutar en máquinas virtuales dedicadas o en aislamiento, utilice imágenes personalizadas o quiera usar el exceso de capacidad del plan de App Service.When you need to run in dedicated VMs or in isolation, use custom images, or want to use your excess App Service plan capacity. Usa la facturación del plan de App Service regular.Uses regular App Service plan billing. El costo se basa en el plan de tarifa elegido.Cost is based on your chosen pricing tier.

Elija el plan que mejor se adapte a sus requisitos de rendimiento y costo de sus funciones.You chose the plan that best supports your function performance and cost requirements. Para más información, consulte Escalado y hospedaje de Azure Functions.To learn more, see Azure Functions scale and hosting.

En este artículo solo se trata el plan de consumo, ya que este plan da como resultado costos variables.This article deals only with the Consumption plan, since this plan results in variable costs. Este artículo reemplaza al artículo Preguntas más frecuentes sobre la facturación de costos del plan de consumo.This article supersedes the Consumption plan cost billing FAQ article.

Durable Functions también puede ejecutarse en un plan de consumo.Durable Functions can also run in a Consumption plan. Para más información sobre las consideraciones de costo al usar Durable Functions, consulte Facturación de Durable Functions.To learn more about the cost considerations when using Durable Functions, see Durable Functions billing.

Costos según el plan de consumoConsumption plan costs

El costo de ejecución de una única ejecución de función se mide en GB por segundo.The execution cost of a single function execution is measured in GB-seconds. El costo de ejecución se calcula mediante la combinación del uso de memoria con el tiempo de ejecución.Execution cost is calculated by combining its memory usage with its execution time. Una función que se ejecuta durante más tiempo cuesta más, al igual que una función que consume más memoria.A function that runs for longer costs more, as does a function that consumes more memory.

Considere un caso en el que la cantidad de memoria que usa la función permanece constante.Consider a case where the amount of memory used by the function stays constant. En este caso, el cálculo del costo es una multiplicación simple.In this case, calculating the cost is simple multiplication. Por ejemplo, suponga que la función ha consumido 0,5 GB durante tres segundos.For example, say that your function consumed 0.5 GB for 3 seconds. Después, el costo de ejecución es 0.5GB * 3s = 1.5 GB-seconds.Then the execution cost is 0.5GB * 3s = 1.5 GB-seconds.

Dado que el uso de la memoria cambia con el tiempo, el cálculo es esencialmente la parte integral del uso de la memoria a lo largo del tiempo.Since memory usage changes over time, the calculation is essentially the integral of memory usage over time. El sistema realiza este cálculo mediante el muestreo del uso de memoria del proceso (junto con procesos secundarios) a intervalos regulares.The system does this calculation by sampling the memory usage of the process (along with child processes) at regular intervals. Como se mencionó en la página de precios, el uso de memoria se redondea al cubo de 128 MB más próximo.As mentioned on the pricing page, memory usage is rounded up to the nearest 128-MB bucket. Cuando el proceso use 160 MB, se le cobrará por 256 MB.When your process is using 160 MB, you're charged for 256 MB. El cálculo tiene en cuenta la simultaneidad, que son varias ejecuciones de funciones simultáneas en el mismo proceso.The calculation takes into account concurrency, which is multiple concurrent function executions in the same process.

Nota

Aunque el uso de CPU no se considera directamente en el costo de la ejecución, puede tener un impacto en el costo cuando afecta al tiempo de ejecución de la función.While CPU usage isn't directly considered in execution cost, it can have an impact on the cost when it affects the execution time of the function.

En el caso de una función desencadenada por HTTP, cuando se produce un error antes de que el código de la función empiece a ejecutarse, no se cobra por una ejecución.For an HTTP-triggered function, when an error occurs before your function code begins to execute you aren't charged for an execution. Esto significa que las respuestas 401 de la plataforma debidas a la validación de la clave de API o a la característica de autenticación o autorización de App Service no cuentan en el costo de ejecución.This means that 401 responses from the platform due to API key validation or the App Service Authentication / Authorization feature don't count against your execution cost. Del mismo modo, las respuestas de código de estado 5xx no cuentan cuando se producen en la plataforma antes de que una función procese la solicitud.Similarly, 5xx status code responses aren't counted when they occur in the platform prior to a function processing the request. Una respuesta 5xx generada por la plataforma después de que el código de función se haya empezado a ejecutar se cuenta como una ejecución, aunque el código de la función no genere el error.A 5xx response generated by the platform after your function code has started to execute is still counted as an execution, even if the error isn't raised by your function code.

Al calcular el costo general de la ejecución de las funciones en cualquier plan, recuerde que el entorno en tiempo de ejecución de Functions usa otros servicios de Azure, que se facturan por separado.When estimating the overall cost of running your functions in any plan, remember that the Functions runtime uses several other Azure services, which are each billed separately. Al calcular los precios de las aplicaciones de funciones, los desencadenadores y enlaces que tenga que se integren con otros servicios de Azure requieren que cree y pague por estos servicios adicionales.When calculating pricing for function apps, any triggers and bindings you have that integrate with other Azure services require you to create and pay for those additional services.

En el caso de las funciones que se ejecutan en un plan de consumo, el costo total es el costo de ejecución de las funciones, más el costo del ancho de banda y servicios adicionales.For functions running in a Consumption plan, the total cost is the execution cost of your functions, plus the cost of bandwidth and additional services.

Al calcular los costos generales de la aplicación de funciones y los servicios relacionados, use la calculadora de precios de Azure.When estimating the overall costs of your function app and related services, use the Azure pricing calculator.

Costo relacionadoRelated cost DescripciónDescription
Cuenta de almacenamientoStorage account Cada aplicación de funciones requiere que tenga una cuenta de almacenamiento de Azure de uso general asociada, que se factura por separado.Each function app requires that you have an associated General Purpose Azure Storage account, which is billed separately. El tiempo de ejecución de Functions usa esta cuenta internamente, pero también se puede usar para los desencadenadores y enlaces de almacenamiento.This account is used internally by the Functions runtime, but you can also use it for Storage triggers and bindings. Si no tiene una cuenta de almacenamiento, se crea una automáticamente cuando se crea la aplicación de funciones.If you don't have a storage account, one is created for you when the function app is created. Para más información, consulte Requisitos de la cuenta de almacenamiento.To learn more, see Storage account requirements.
Application InsightsApplication Insights Functions se basa en Application Insights para proporcionar una experiencia de supervisión de alto rendimiento para las aplicaciones de funciones.Functions relies on Application Insights to provide a high-performance monitoring experience for your function apps. Aunque no es necesario, debe habilitar la integración de Application Insights.While not required, you should enable Application Insights integration. Cada mes se incluye una concesión gratuita de datos de telemetría.A free grant of telemetry data is included every month. Para más información, consulte la página de precios de Azure Monitor.To learn more, see the Azure Monitor pricing page.
Ancho de banda de la redNetwork bandwidth No tiene que pagar por las transferencias de datos entre los servicios de Azure de la misma región.You don't pay for data transfer between Azure services in the same region. Sin embargo, puede incurrir en costos de transferencia de datos de salida a otra región o fuera de Azure.However, you can incur costs for outbound data transfers to another region or outside of Azure. Para más información, consulte Detalles de precios de ancho de banda.To learn more, see Bandwidth pricing details.

Comportamientos que afectan al tiempo de ejecuciónBehaviors affecting execution time

Los siguientes comportamientos de las funciones pueden afectar al tiempo de ejecución:The following behaviors of your functions can impact the execution time:

  • Desencadenadores y enlaces: El tiempo necesario para leer la entrada y escribir la salida en los enlaces de funciones se cuenta como tiempo de ejecución.Triggers and bindings: The time taken to read input from and write output to your function bindings is counted as execution time. Por ejemplo, cuando la función usa un enlace de salida para escribir un mensaje en una cola de almacenamiento de Azure, el tiempo de ejecución incluye el tiempo necesario para escribir el mensaje en la cola, que se incluye en el cálculo del costo de la función.For example, when your function uses an output binding to write a message to an Azure storage queue, your execution time includes the time taken to write the message to the queue, which is included in the calculation of the function cost.

  • Ejecución asincrónica: El tiempo que la función espera los resultados de una solicitud asincrónica (await en C#) se cuenta como tiempo de ejecución.Asynchronous execution: The time that your function waits for the results of an async request (await in C#) is counted as execution time. El cálculo de GB por segundo se basa en la hora de inicio y finalización de la función y el uso de memoria durante ese período.The GB-second calculation is based on the start and end time of the function and the memory usage over that period. Lo que sucede durante ese tiempo en términos de actividad de la CPU no se factoriza en el cálculo.What is happening over that time in terms of CPU activity isn't factored into the calculation. Es posible que pueda reducir los costos durante las operaciones asincrónicas mediante el uso de Durable Functions.You may be able to reduce costs during asynchronous operations by using Durable Functions. No se le facturará por el tiempo de espera en las funciones del orquestador.You're not billed for time spent at awaits in orchestrator functions.

En la factura, puede ver los datos relacionados con los costos del total de ejecuciones: Funciones y el tiempo de ejecución: Funciones, junto con los costos facturados reales.In your invoice, you can view the cost-related data of Total Executions - Functions and Execution Time - Functions, along with the actual billed costs. Sin embargo, estos datos de factura son un agregado mensual para un período de facturación anterior.However, this invoice data is a monthly aggregate for a past invoice period.

Métricas del nivel de la aplicación de funcionesFunction app-level metrics

Para comprender mejor el impacto en el costo de las funciones, puede usar Azure Monitor para ver las métricas relacionadas con los costos que se están generando actualmente en las aplicaciones de funciones.To better understand the cost impact of your functions, you can use Azure Monitor to view cost-related metrics currently being generated by your function apps. Puede usar el explorador de métricas Azure Monitor en Azure Portal o las API REST para obtener estos datos.You can use either Azure Monitor metrics explorer in the Azure portal or REST APIs to get this data.

Explorador de métricas de MonitorMonitor metrics explorer

Use el explorador de métricas de Azure Monitor para ver los datos relacionados con los costos de las aplicaciones de funciones del plan de consumo en un formato gráfico.Use Azure Monitor metrics explorer to view cost-related data for your Consumption plan function apps in a graphical format.

  1. En la parte superior de Azure Portal, en Buscar recursos, servicios y documentos, busque monitor y seleccione Monitor en Servicios.At the top of the Azure portal in Search services, resources, and docs search for monitor and select Monitor under Services.

  2. A la izquierda, seleccione Métricas > Seleccionar un recurso y, después, use la configuración que se encuentra debajo de la imagen para elegir la aplicación de funciones.At the left, select Metrics > Select a resource, then use the settings below the image to choose your function app.

    Selección del recurso de la aplicación de funciones

    ConfiguraciónSetting Valor sugeridoSuggested value DescripciónDescription
    SubscriptionSubscription Su suscripciónYour subscription La suscripción con la aplicación de funciones.The subscription with your function app.
    Resource groupResource group Su grupo de recursosYour resource group El grupo de recursos que contiene la aplicación de funciones.The resource group that contains your function app.
    Tipo de recursoResource type Servicios de aplicacionesApp Services Las aplicaciones de funciones se muestran como instancias de App Services en Monitor.Function apps are shown as App Services instances in Monitor.
    ResourceResource Su aplicación de funciónYour function app La aplicación de funciones que se va a supervisar.The function app to monitor.
  3. Seleccione Aplicar para elegir la aplicación de funciones como el recurso que se va a supervisar.Select Apply to choose your function app as the resource to monitor.

  4. En Métrica, elija Recuento de la ejecución de la función y Suma en Agregación.From Metric, choose Function Execution Count and Sum for Aggregation. Esto agrega al gráfico la suma de los recuentos de ejecución durante el período elegido.This adds the sum of the execution counts during chosen period to the chart.

    Definición de una métrica de aplicación de funciones para agregarla al gráfico

  5. Seleccione Agregar métrica y repita los pasos 2 a 4 para agregar Unidades de ejecución de la función al gráfico.Select Add metric and repeat steps 2-4 to add Function Execution Units to the chart.

El gráfico resultante contiene los totales de ambas métricas de ejecución en el intervalo de tiempo elegido, que en este caso es de dos horas.The resulting chart contains the totals for both execution metrics in the chosen time range, which in this case is two hours.

Gráfico de recuentos de ejecución de funciones y unidades de ejecución

Dado que el número de unidades de ejecución es mucho mayor que el recuento de ejecuciones, el gráfico simplemente muestra las unidades de ejecución.As the number of execution units is so much greater than the execution count, the chart just shows execution units.

En este gráfico se muestra un total de 1,11 mil millones de Function Execution Units consumidas en un período de dos horas, medido en MB por milisegundo.This chart shows a total of 1.11 billion Function Execution Units consumed in a two-hour period, measured in MB-milliseconds. Para convertir a GB por segundo, divídalo por 1 024 000.To convert to GB-seconds, divide by 1024000. En este ejemplo, la aplicación de funciones ha consumido 1110000000 / 1024000 = 1083.98 GB por segundo.In this example, the function app consumed 1110000000 / 1024000 = 1083.98 GB-seconds. Puede tomar este valor y multiplicar por el precio actual del tiempo de ejecución en la página de precios de Functions, que le proporciona el costo de estas dos horas, suponiendo que ya ha usado cualquier concesión gratuita de tiempo de ejecución.You can take this value and multiply by the current price of execution time on the Functions pricing page, which gives you the cost of these two hours, assuming you've already used any free grants of execution time.

Azure CLIAzure CLI

La CLI de Azure tiene comandos para recuperar métricas.The Azure CLI has commands for retrieving metrics. Puede usar la CLI desde un entorno de comandos local o directamente desde el portal mediante Azure Cloud Shell.You can use the CLI from a local command environment or directly from the portal using Azure Cloud Shell. Por ejemplo, el comando siguiente az monitor metrics list devuelve datos por hora durante el mismo período de tiempo utilizado antes.For example, the following az monitor metrics list command returns hourly data over same time period used before.

Asegúrese de reemplazar <AZURE_SUBSCRIPTON_ID> por el identificador de suscripción de Azure que ejecuta el comando.Make sure to replace <AZURE_SUBSCRIPTON_ID> with your Azure subscription ID running the command.

az monitor metrics list --resource /subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/metrics-testing-consumption/providers/Microsoft.Web/sites/metrics-testing-consumption --metric FunctionExecutionUnits,FunctionExecutionCount --aggregation Total --interval PT1H --start-time 2019-09-11T21:46:00Z --end-time 2019-09-11T23:18:00Z

Este comando devuelve una carga JSON similar a la del ejemplo siguiente:This command returns a JSON payload that looks like the following example:

{
  "cost": 0.0,
  "interval": "1:00:00",
  "namespace": "Microsoft.Web/sites",
  "resourceregion": "centralus",
  "timespan": "2019-09-11T21:46:00Z/2019-09-11T23:18:00Z",
  "value": [
    {
      "id": "/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX/resourceGroups/metrics-testing-consumption/providers/Microsoft.Web/sites/metrics-testing-consumption/providers/Microsoft.Insights/metrics/FunctionExecutionUnits",
      "name": {
        "localizedValue": "Function Execution Units",
        "value": "FunctionExecutionUnits"
      },
      "resourceGroup": "metrics-testing-consumption",
      "timeseries": [
        {
          "data": [
            {
              "average": null,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-09-11T21:46:00+00:00",
              "total": 793294592.0
            },
            {
              "average": null,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-09-11T22:46:00+00:00",
              "total": 316576256.0
            }
          ],
          "metadatavalues": []
        }
      ],
      "type": "Microsoft.Insights/metrics",
      "unit": "Count"
    },
    {
      "id": "/subscriptions/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX/resourceGroups/metrics-testing-consumption/providers/Microsoft.Web/sites/metrics-testing-consumption/providers/Microsoft.Insights/metrics/FunctionExecutionCount",
      "name": {
        "localizedValue": "Function Execution Count",
        "value": "FunctionExecutionCount"
      },
      "resourceGroup": "metrics-testing-consumption",
      "timeseries": [
        {
          "data": [
            {
              "average": null,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-09-11T21:46:00+00:00",
              "total": 33538.0
            },
            {
              "average": null,
              "count": null,
              "maximum": null,
              "minimum": null,
              "timeStamp": "2019-09-11T22:46:00+00:00",
              "total": 13040.0
            }
          ],
          "metadatavalues": []
        }
      ],
      "type": "Microsoft.Insights/metrics",
      "unit": "Count"
    }
  ]
}

Esta respuesta determinada muestra que, de 2019-09-11T21:46 a 2019-09-11T23:18, la aplicación ha consumido 1,11 mil millones de MB por milisegundo (1083,98 GB por segundo).This particular response shows that from 2019-09-11T21:46 to 2019-09-11T23:18, the app consumed 1110000000 MB-milliseconds (1083.98 GB-seconds).

Métricas de nivel de funciónFunction-level metrics

Las unidades de ejecución de la función son una combinación de tiempo de ejecución y de uso de memoria, lo que hace que sea una métrica difícil de entender.Function execution units are a combination of execution time and your memory usage, which makes it a difficult metric for understanding memory usage. Los datos de memoria no son una métrica disponible actualmente en Azure Monitor.Memory data isn't a metric currently available through Azure Monitor. Sin embargo, si desea optimizar el uso de memoria de la aplicación, puede utilizar los datos del contador de rendimiento recopilados por Application Insights.However, if you want to optimize the memory usage of your app, can use the performance counter data collected by Application Insights.

Si aún no lo ha hecho, habilite Application Insights en la aplicación de funciones.If you haven't already done so, enable Application Insights in your function app. Con esta integración habilitada, puede consultar estos datos de telemetría en el portal.With this integration enabled, you can query this telemetry data in the portal.

Determinación del uso de memoriaDetermine memory usage

En Supervisión, seleccione Registros (Analytics) , copie la siguiente consulta de telemetría y péguela en la ventana de consulta y seleccione Ejecutar.Under Monitoring, select Logs (Analytics), then copy the following telemetry query and paste it into the query window and select Run. Esta consulta devuelve el uso de memoria total en cada tiempo muestreado.This query returns the total memory usage at each sampled time.

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

Los resultados deben tener un aspecto similar al ejemplo siguiente:The results look like the following example:

marca de tiempo [UTC]timestamp [UTC] namename valuevalue
9/12/2019, 1:05:14.947 AM9/12/2019, 1:05:14.947 AM Bytes privadosPrivate Bytes 209,932,288209,932,288
9/12/2019, 1:06:14.994 AM9/12/2019, 1:06:14.994 AM Bytes privadosPrivate Bytes 212 189 184212,189,184
9/12/2019, 1:06:30.010 AM9/12/2019, 1:06:30.010 AM Bytes privadosPrivate Bytes 231,714,816231,714,816
9/12/2019, 1:07:15.040 AM9/12/2019, 1:07:15.040 AM Bytes privadosPrivate Bytes 210,591,744210,591,744
9/12/2019, 1:12:16.285 AM9/12/2019, 1:12:16.285 AM Bytes privadosPrivate Bytes 216,285,184216,285,184
9/12/2019, 1:12:31.376 AM9/12/2019, 1:12:31.376 AM Bytes privadosPrivate Bytes 235,806,720235,806,720

Determinación de la duraciónDetermine duration

Azure Monitor realiza un seguimiento de las métricas en el nivel de recursos, que para en el caso de Functions es la aplicación de funciones.Azure Monitor tracks metrics at the resource level, which for Functions is the function app. La integración de Application Insights emite métricas por función.Application Insights integration emits metrics on a per-function basis. Esta es una consulta de análisis de ejemplo para obtener la duración media de una función:Here's an example analytics query to get the average duration of a function:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
namename averageDurationMillisecondsaverageDurationMilliseconds
QueueTrigger AvgDurationMsQueueTrigger AvgDurationMs 16.08716.087
QueueTrigger MaxDurationMsQueueTrigger MaxDurationMs 90.24990.249
QueueTrigger MinDurationMsQueueTrigger MinDurationMs 8.5228.522

Pasos siguientesNext steps