Escalado de instancias administradas de Lambda
Las instancias administradas de Lambda no se escalan cuando llegan las invocaciones y no admiten arranques en frío. En su lugar, escala de forma asíncrona mediante señales de consumo de recursos. Las instancias administradas actualmente se escalan en función del uso de los recursos de la CPU y de la saturación de la concurrencia múltiple.
Diferencias clave:
-
Lambda (predeterminado): escala cuando no hay un entorno de ejecución libre para gestionar una invocación entrante (arranque en frío).
-
Instancias administradas de Lambda: se escalan de forma asíncrona en función del uso de los recursos de la CPU y de la saturación de concurrencia múltiple de los entornos de ejecución.
Si el tráfico más que se duplica en 5 minutos, es posible que experimente limitaciones a medida que Lambda escala verticalmente las instancias y los entornos de ejecución para satisfacer la demanda.
El ciclo de vida del escalado
Las instancias administradas de Lambda utilizan una arquitectura distribuida para administrar el escalado:
Componentes:
-
Instancias administradas: se ejecutan en su cuenta, en las subredes que proporcione.
-
Enrutador y escalador: componentes Lambda compartidos que enrutan las invocaciones y administran el escalado.
-
Agente de Lambda: se ejecuta en cada instancia administrada para administrar el ciclo de vida del entorno de ejecución y supervisar el consumo de recursos.
Funcionamiento:
-
Cuando publica una versión de la función con un proveedor de capacidad, Lambda lanza las instancias administradas en su cuenta. Lanza tres de forma predeterminada para garantizar la resiliencia de la zona de disponibilidad e inicia tres entornos de ejecución antes de marcar la versión de la función como ACTIVA.
-
Cada instancia administrada puede ejecutar entornos de ejecución para varias funciones asignadas al mismo proveedor de capacidad.
-
A medida que el tráfico fluye hacia su aplicación, los entornos de ejecución consumen recursos. El agente de Lambda notifica al escalador, que decide si escalar nuevos entornos de ejecución o instancias administradas.
-
Si el enrutador intenta enviar una invocación a un entorno de ejecución con un alto consumo de recursos, el agente de Lambda de esa instancia le notifica que reintente en otra.
-
A medida que disminuye el tráfico, el agente de Lambda notifica al escalador, que toma la decisión de reducir verticalmente los entornos de ejecución y reducir horizontalmente las instancias administradas.
Ajuste del comportamiento de escalado
Puede personalizar el comportamiento de escalado de las instancias administradas mediante cinco controles:
Controles de nivel de función
1. Memoria y vCPU de la función
Elija el tamaño de la memoria y la asignación de vCPU para su función. El tamaño de función más pequeño admitido es de 2 GB y 1 vCPU.
Consideraciones:
-
Elija una configuración de memoria y vCPU que admita ejecuciones simultáneas múltiples de su función.
-
No puede configurar una función con menos de 1 vCPU porque las funciones que se ejecutan en instancias administradas deben admitir varias cargas de trabajo simultáneas.
-
No puede elegir menos de 2 GB porque esto coincide con la proporción de memoria con respecto a la vCPU de 2 a 1 de las instancias c, que tienen la proporción más baja.
-
Para las aplicaciones de Python, es posible que deba elegir una proporción más alta de memoria con respecto a las vCPU, por ejemplo, 4 a 1 u 8 a 1, debido a la forma en que Python gestiona la concurrencia múltiple.
-
Si ejecuta operaciones con un uso intensivo de la CPU o realiza poca E/S, debe elegir más de una vCPU.
2. Simultaneidad máxima
Establezca la concurrencia máxima por entorno de ejecución.
Comportamiento predeterminado: Lambda elija valores predeterminados razonables que equilibran el consumo de recursos y el rendimiento y que funcionan para una amplia variedad de aplicaciones.
Pautas de ajuste:
-
Aumente la concurrencia: si las invocaciones de sus funciones utilizan muy poca CPU, puede aumentar la concurrencia máxima hasta un máximo de 64 por vCPU.
-
Reduzca la concurrencia: si su aplicación consume una gran cantidad de memoria y muy poca CPU, puede reducir la concurrencia máxima.
Importante: Dado que las instancias administradas de Lambda están diseñadas para aplicaciones simultáneas múltiples, los entornos de ejecución con una concurrencia muy baja pueden experimentar limitaciones en el momento del escalado.
3. Entornos de ejecución por función
Configure el número mínimo y máximo de los entornos de ejecución para su función.
Comportamiento predeterminado: Lambda mantiene un mínimo predeterminado de 3 entornos de ejecución para garantizar una alta disponibilidad en todas las zonas de disponibilidad.
Pautas de ajuste:
-
Establezca el mínimo: Aprovisione capacidad para el tráfico de referencia y reduzca las limitaciones durante las ráfagas repentinas.
-
Establezca el máximo: Limite el número de entornos de ejecución para controlar el escalado horizontal y evitar problemas del vecino ruidoso cuando varias funciones comparten un proveedor de capacidad.
-
Desactive la función: Defina el mínimo y el máximo en 0 para desactivar una función sin eliminarla.
Ejemplo:
aws lambda put-function-scaling-config \ --function-name my-lmi-function \ --qualifier '$LATEST.PUBLISHED' \ --function-scaling-config MinExecutionEnvironments=5,MaxExecutionEnvironments=20 \ --region us-east-1
Notas importantes:
-
Alcance del calificador: Estas configuraciones se aplican a nivel de función para cada ARN cualificado. Cuando se establece en
$LATEST.PUBLISHED, la configuración se propaga a futuras versiones$LATEST.PUBLISHED. Cuando se establece en una versión específica, las versiones recién publicadas revierten a los valores predeterminados. -
Configuración por pares: Debe establecer los valores mínimo y máximo juntos. Cualquier configuración no especificada revierte a su valor predeterminado. Los valores son válidos para ambos
MinExecutionEnvironmentsyMaxExecutionEnvironmentsoscilan entre 0 y 15 000.
Controles de nivel de los proveedores de capacidad
4. Utilización de recursos de destino
Elija su propio objetivo de consumo de uso de la CPU.
Comportamiento predeterminado: Lambda mantiene suficiente margen de maniobra para que el tráfico se duplique en 5 minutos sin limitaciones.
Opciones de optimización:
-
Si su carga de trabajo es muy estable o si su aplicación no es sensible a las limitaciones, puede configurar el objetivo en un nivel alto para lograr una mayor utilización y reducir los costos.
-
Si desea mantener el margen para las ampliaciones de tráfico, puede establecer los objetivos de recursos en un nivel bajo, lo que requerirá más capacidad.
5. Selección del tipo de instancia
Configure los tipos de instancias permitidos o excluidos.
Comportamiento predeterminado: Lambda elige los mejores tipos de instancias para su carga de trabajo. Recomendamos dejar que las instancias administradas de Lambda elijan los tipos de instancia, ya que restringir la cantidad de tipos de instancias posibles puede reducir la disponibilidad.
Configuración personalizada:
-
Requisitos de hardware específicos: defina los tipos de instancias permitidos en una lista de instancias compatibles. Por ejemplo, si tiene una aplicación que requiere un ancho de banda de la red elevado, puede seleccionar varios tipos de instancias n.
-
Optimización de costos: para los entornos de pruebas o desarrollo, podría elegir tipos de instancias más pequeñas, como los tipos de instancia m7a.large.
Escalado programado
Utilice el Programador de Amazon EventBridge para ajustar los entornos de ejecución mínima y máxima de su función de forma periódica o puntual. Esto resulta útil para crear patrones de tráfico predecibles, como el escalado vertical antes de las horas punta y la reducción vertical durante las horas de menor actividad.
Configuraciones del programador:
-
Cree una función de ejecución del Programador de EventBridge o utilice una función existente que conceda permiso para llamar a
lambda:PutFunctionScalingConfigen la función de destino. -
Cree una programación mediante una expresión CRON o de frecuencia, y diríjase a la API
PutFunctionScalingConfigcomo un destino universal. Especifique los valores nuevosMinExecutionEnvironmentsyMaxExecutionEnvironmentsen la carga útil de entrada.
Ejemplo 1: Escalar para gestionar los aumentos de tráfico planificados
Cree dos programaciones para escalarlas verticalmente antes de las horas punta y reducirlas verticalmente después. Cada programación se dirige a la API PutFunctionScalingConfig con valores MinExecutionEnvironments y MaxExecutionEnvironments actualizados.
Escale verticalmente a las 8:00 h UTC (mín.= 100, máx.= 1000):
aws scheduler create-schedule \ --name "ScaleUpLambdaManagedInstances" \ --schedule-expression "cron(0 8 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 100, \"MaxExecutionEnvironments\": 1000}}" }'
Reduzca verticalmente a las 18:00 h UTC (mín.= 5, máx.= 20):
aws scheduler create-schedule \ --name "ScaleDownLambdaManagedInstances" \ --schedule-expression "cron(0 18 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 5, \"MaxExecutionEnvironments\": 20}}" }'
Ejemplo 2: Desactivar durante las horas de menor actividad y volver a activar
Al establecer ambos valores MinExecutionEnvironments y MaxExecutionEnvironments en 0, se desactiva la versión de la función sin eliminarla. Una función desactivada no se reduce automáticamente según el tráfico. Debe reactivarla de forma explícita estableciendo valores distintos de cero mediante otra acción programada.
Desactivar a las 22:00 h UTC (mín.= 0, máx.= 0):
aws scheduler create-schedule \ --name "DeactivateLambdaManagedInstances" \ --schedule-expression "cron(0 22 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 0, \"MaxExecutionEnvironments\": 0}}" }'
Reactivar a las 7:00 h UTC (mín.= 10, máx.= 20):
aws scheduler create-schedule \ --name "ReactivateLambdaManagedInstances" \ --schedule-expression "cron(0 7 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{ "Arn": "arn:aws:scheduler:::aws-sdk:lambda:PutFunctionScalingConfig", "RoleArn": "arn:aws:iam::<account-id>:role/eventbridge-scheduler-role", "Input": "{\"FunctionName\": \"my-lmi-function\", \"Qualifier\": \"$LATEST.PUBLISHED\", \"FunctionScalingConfig\": {\"MinExecutionEnvironments\": 10, \"MaxExecutionEnvironments\": 20}}" }'
Pautas de ajuste:
-
Para cargas de trabajo con aumentos predecibles, cree varios horarios que se adapten a su patrón de tráfico: uno para escalar verticalmente las funciones antes de las horas punta y otro para reducirlo verticalmente después de las horas punta. Cada programación sigue el mismo patrón con los valores
MinExecutionEnvironmentsyMaxExecutionEnvironmentsactualizados. -
El escalado programado ajusta el nivel mínimo y máximo de los entornos de ejecución aprovisionados, pero el escalado actual entre el mínimo y el máximo sigue respondiendo a la utilización de la CPU y a la saturación de la simultaneidad.
-
Si su tráfico se duplica más del doble en los siguientes 5 minutos a un escalado vertical programado, podría seguir experimentando limitaciones de rendimiento mientras se asigna la capacidad.
-
Al escalar a cero para desactivar una función, recuerde que la reactivación requiere una llamada explícita
PutFunctionScalingConfigcon valores distintos de cero.
Siguientes pasos
-
Obtenga información sobre los proveedores de capacidad para las instancias administradas de Lambda.
-
Revise las guías específicas del tiempo de ejecución para gestionar la concurrencia múltiple.
-
Configure la conectividad de VPC para sus proveedores de capacidad.
-
Supervise las métricas de escalado para optimizar el comportamiento de escalado.