Estimación de los costes basados en el consumo
En este artículo se muestra cómo calcular los costes de los planes de hospedaje Consumo y Consumo flexible.
Azure Functions ofrece actualmente estas diferentes opciones de hospedaje para las aplicaciones de funciones, con cada opción que tiene su propio modelo de precios del plan de hospedaje:
Planear | Descripción |
---|---|
Plan de consumo flexible | Se paga por el tiempo de ejecución en las instancias en las que se ejecutan las funciones, además de cualquier instancia siempre preparada. Las instancias se agregan y quitan dinámicamente en función del número de eventos entrantes. Este es el plan de escalado dinámico recomendado, que también admite la integración de red virtual. |
Premium | Proporciona las mismas características y mecanismo de escalado que el plan de consumo, pero con un rendimiento mejorado e integración de red virtual. El costo se basa en el plan de tarifa elegido. Para más información, consulte Plan Premium de Azure Functions. |
Dedicado (App Service) (nivel básico o superior) |
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. Usa la facturación del plan de App Service regular. El costo se basa en el plan de tarifa elegido. |
Aplicaciones de contenedor | Cree e implemente aplicaciones de funciones contenedorizadas en un entorno totalmente administrado hospedado por Azure Container Apps, que permite ejecutar las funciones junto con otros microservicios, API, sitios web y flujos de trabajo como programas hospedados en contenedores. |
Consumo | Solo se le cobrará por el tiempo que se ejecute la aplicación de funciones. Este plan incluye una concesión gratuita por suscripción. |
Siempre debe elegir la opción que mejor admita los requisitos de características, rendimiento y costes para las ejecuciones de funciones. Para más información, consulte Escalado y hospedaje de Azure Functions.
Este artículo se centra en los planes Consumo y Consumo flexible, ya que en estos planes la facturación depende de los períodos activos de ejecuciones dentro de cada instancia.
Durable Functions también se puede ejecutar en ambos planes. Para más información sobre las consideraciones de costo al usar Durable Functions, consulte Facturación de Durable Functions.
Costes basados en el consumo
La forma en que se calculan los costes basados en el consumo, incluidas las concesiones gratuitas, depende del plan específico. Para obtener la información de costes y concesión más actual, consulte la página de precios de Azure Functions.
Hay dos modos por los que los costos se determinan al ejecutar las aplicaciones en el plan de consumo flexible. Cada modo se determina por instancia.
Modo de facturación | Descripción |
---|---|
A petición | Cuando se ejecuta en modo a petición, solo se le factura la cantidad de tiempo que se ejecuta el código de función en las instancias disponibles. En el modo a petición, no se requiere ningún recuento mínimo de instancias. Se le factura por: • La cantidad total de memoria aprovisionada mientras cada instancia a petición ejecuta activamente funciones (en GB-segundos), menos una concesión gratuita de GB al mes. • Número total de ejecuciones, menos una concesión gratuita (número) de ejecuciones al mes. |
Siempre preparada | Puede configurar una o varias instancias, asignadas a tipos de desencadenadores específicos (HTTP/Durable/Blob) y funciones individuales, que siempre están disponibles para poder controlar las solicitudes. Cuando tenga habilitadas instancias siempre preparadas, se le factura lo siguiente: • La cantidad total de memoria aprovisionada en todas las instancias siempre preparadas, conocidas como línea base (en GB-segundos). • La cantidad total de memoria aprovisionada durante el tiempo cada instancia siempre preparada está ejecutando activamente funciones (en GB-segundos). • Número total de ejecuciones. En la facturación siempre lista, no hay concesiones gratuitas. |
Para obtener la información más actualizada sobre los precios de ejecución, los costos de línea base siempre listos y las concesiones gratuitas para las ejecuciones a petición, consulte la página de precios de Azure Functions.
Este diagrama representa cómo se determinan los costes a petición en este plan:
Además del tiempo de ejecución, cuando utiliza una o más instancias siempre preparadas, también se le factura una tarifa base más baja por la cantidad de instancias siempre preparadas que mantiene. El tiempo de ejecución de las instancias siempre preparadas puede ser más barato que el tiempo de ejecución en las instancias con ejecución a petición.
Importante
En este artículo, los precios a petición se utilizan para ayudar a comprender los cálculos de ejemplo. Compruebe siempre los costes actuales en la página de precios de Azure Functions al calcular los costes en los que podría incurrir al ejecutar las funciones en el Plan de consumo flexible.
Piense en una aplicación de funciones que se compone únicamente de desencadenadores HTTP y estos datos básicos:
- Los desencadenadores HTTP controlan 40 solicitudes constantes por segundo.
- Los desencadenadores HTTP controlan 10 solicitudes simultáneas.
- La configuración de tamaño de la memoria de instancia es
2048 MB
. - No se han configurado instancias siempre preparadas, lo que significa que la aplicación puede escalar a cero.
En una situación como esta, los precios dependen más del tipo de trabajo que se realiza durante la ejecución del código. Echemos un vistazo a dos escenarios de carga de trabajo:
Carga de trabajo enlazada a la CPU: en una carga de trabajo enlazada a la CPU, no existe ninguna ventaja en procesar varias solicitudes en paralelo en la misma instancia. Esto significa que es mejor distribuir cada solicitud a su propia instancia para que las solicitudes se completen lo antes posible sin contención. En este escenario, debe establecer una simultaneidad de desencadenador HTTP baja de
1
. Con 10 solicitudes simultáneas, la aplicación escala a un estado estable de aproximadamente 10 instancias, y cada instancia está continuamente activa procesando una solicitud a la vez.Dado que el tamaño de cada instancia es de aproximadamente 2 GB, el consumo de una única instancia activa continuamente es de
2 GB * 3600 s = 7200 GB-s
, que a la velocidad de ejecución a petición supuesta (sin ninguna concesión gratuita aplicada) es de$0.1152 USD
por hora por instancia. Dado que la aplicación enlazada a la CPU se escala a 10 instancias, la velocidad total por hora para el tiempo de ejecución es de$1.152 USD
.Del mismo modo, el cargo por ejecución a petición (sin ninguna concesión gratuita) de 40 solicitudes por segundo es igual a
40 * 3600 = 144,000
o 0,144 millones de ejecuciones por hora. El coste total (sin concesión) por hora de las ejecuciones es de0.144 * $0.20
, que equivale a$0.0288
por hora.En este escenario, el coste total por hora de la ejecución a petición en 10 instancias es de
$1.152 + $0.0288 = $1.1808 USD
.Carga de trabajo enlazada a E/S: en una carga de trabajo enlazada a E/S, la mayoría del tiempo de la aplicación se dedica a esperar a la solicitud entrante, lo que podría tener limitaciones según el rendimiento de la red u otros factores ascendentes. Debido a las entradas limitadas, el código puede procesar varias operaciones simultáneamente sin efectos negativos. En este escenario, supongamos que puede procesar las 10 solicitudes simultáneas en la misma instancia.
Dado que los cargos de consumo se basan solo en la memoria de cada instancia activa, el cálculo del cargo de consumo es simplemente
2 GB * 3600 s = 7200 GB-s
, que a la velocidad de ejecución a petición asumida (sin ninguna concesión gratuita aplicada) es de$0.1152 USD
por hora para la instancia única.Como en el escenario enlazado a la CPU, el cargo por ejecución a petición (sin ninguna concesión gratuita) de 40 solicitudes por segundo es igual a
40 * 3600 = 144,000
o 0,144 millones de ejecuciones por hora. En este caso, el coste total por hora (sin ninguna concesión) de las ejecuciones de0.144 * $0.20
, que es de$0.0288
por hora.En este escenario, el costo total por hora de la ejecución a petición en una sola instancia es de
$0.1152 + $0.0288 = $0.144 USD
.
Otros costos relacionados
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. Al estimar 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.
En el caso de las funciones que se ejecutan en un plan de consumo, el coste total es el coste de ejecución de las funciones, más el coste del ancho de banda y servicios adicionales.
Al calcular los costos generales de la aplicación de funciones y los servicios relacionados, use la calculadora de precios de Azure.
Costo relacionado | Descripción |
---|---|
Cuenta de almacenamiento | Cada aplicación de funciones requiere que tenga una cuenta de almacenamiento de Azure de uso general asociada, que se factura por separado. El tiempo de ejecución de Functions usa esta cuenta internamente, pero también se puede usar para los desencadenadores y enlaces de almacenamiento. Si no tiene una cuenta de almacenamiento, se crea una automáticamente cuando se crea la aplicación de funciones. Para más información, consulte Requisitos de la cuenta de almacenamiento. |
Application Insights | Functions se basa en Application Insights para proporcionar una experiencia de supervisión de alto rendimiento para las aplicaciones de funciones. Aunque no es necesario, debe habilitar la integración de Application Insights. Cada mes se incluye una concesión gratuita de datos de telemetría. Para más información, consulte la página de precios de Azure Monitor. |
Ancho de banda de la red | Puede incurrir en costos de transferencia de datos en función de la dirección y del escenario del movimiento de datos. Para más información, consulte Detalles de precios de ancho de banda. |
Comportamientos que afectan al tiempo de ejecución
Los siguientes comportamientos de las funciones pueden afectar al tiempo de ejecución:
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. 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.
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. 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. Lo que sucede durante ese tiempo en términos de actividad de la CPU no se factoriza en el cálculo. Es posible que pueda reducir los costos durante las operaciones asincrónicas mediante el uso de Durable Functions. No se le facturará por el tiempo de espera en las funciones del orquestador.
Visualización de datos relacionados con los costos
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. Sin embargo, estos datos de factura son un agregado mensual para un período de facturación anterior.
Métricas del nivel de la aplicación de funciones
Para comprender mejor los costes 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.
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.
Vaya a la aplicación de funciones en Azure Portal.
En el panel izquierdo, desplácese hacia abajo hasta Supervisión y elija Métricas.
En Métrica, elija Recuento de la ejecución de la función y Suma en Agregación. Esto agrega al gráfico la suma de los recuentos de ejecución durante el período elegido.
Seleccione Agregar métrica y repita los pasos 2 a 4 para agregar Unidades de ejecución de la función al gráfico.
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.
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.
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. Para convertir a GB por segundo, divídalo por 1 024 000. En este ejemplo, la aplicación de funciones ha consumido 1110000000 / 1024000 = 1083.98
GB por segundo. 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.
Métricas de nivel de función
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. Los datos de memoria no son una métrica disponible actualmente en 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.
Si aún no lo ha hecho, habilite Application Insights en la aplicación de funciones. Con esta integración habilitada, puede consultar estos datos de telemetría en el portal.
Puede usar el explorador de métricas de Azure Monitor en Azure Portal o las API REST para obtener los datos de métricas de Monitor.
Determinación del uso de memoria
En Supervisión, seleccione Registros (Analytics) , copie la siguiente consulta de telemetría y péguela en la ventana de consulta y seleccione Ejecutar. Esta consulta devuelve el uso de memoria total en cada tiempo muestreado.
performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value
Los resultados deben tener un aspecto similar al ejemplo siguiente:
marca de tiempo [UTC] | name | value |
---|---|---|
9/12/2019, 1:05:14.947 AM | Bytes privados | 209,932,288 |
9/12/2019, 1:06:14.994 AM | Bytes privados | 212 189 184 |
9/12/2019, 1:06:30.010 AM | Bytes privados | 231,714,816 |
9/12/2019, 1:07:15.040 AM | Bytes privados | 210,591,744 |
9/12/2019, 1:12:16.285 AM | Bytes privados | 216,285,184 |
9/12/2019, 1:12:31.376 AM | Bytes privados | 235,806,720 |
Determinación de la duración
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. La integración de Application Insights emite métricas por función. Esta es una consulta de análisis de ejemplo para obtener la duración media de una función:
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 | 8522 |