Prácticas recomendadas para las instancias administradas de Lambda
Configuración de los proveedores de capacidad
Separe los proveedores de capacidad por nivel de confianza. Cree diferentes proveedores de capacidad para cargas de trabajo con diferentes requisitos de seguridad. Todas las funciones asignadas al mismo proveedor de capacidad deben ser de confianza mutua, ya que los proveedores de capacidad sirven de límite de seguridad.
Utilice nombres descriptivos. Denomine los proveedores de capacidad para indicar claramente su uso previsto y su nivel de confianza (por ejemplo, production-trusted, dev-sandbox). Esto ayuda a los equipos a entender el propósito y la postura de seguridad de cada proveedor de capacidad.
Use varias zonas de disponibilidad. Especifique las subredes entre varias zonas de disponibilidad cuando cree los proveedores de capacidad. Lambda lanza tres instancias de forma predeterminada para la resiliencia de las zonas de disponibilidad, lo que garantiza una alta disponibilidad para sus funciones.
Selección del tipo de instancia
Deje que Lambda elija los tipos de instancia. De forma predeterminada, Lambda elige los mejores tipos de instancias para su carga de trabajo. Le recomendamos que deje que las instancias administradas de Lambda elijan los tipos de instancia por usted, ya que restringir la cantidad de tipos de instancias posibles puede reducir la disponibilidad.
Especifique los tipos de instancias según los requisitos específicos. Si tiene requisitos de hardware específicos, establezca los tipos de instancias permitidos en una lista de instancias compatibles. Por ejemplo:
-
Para las aplicaciones que requieren un ancho de banda de la red elevado, seleccione varios tipos de instancias n.
-
Para entornos de pruebas o desarrollo con limitaciones de costos, elija tipos de instancias más pequeños, como m7a.large.
Función de configuración
Elija la configuración de memoria y vCPU adecuada. Seleccione configuraciones de memoria y vCPU que admitan varias ejecuciones simultáneas de su función. El tamaño mínimo de función admitido es de 2 GB y 1 vCPU.
-
Para las aplicaciones de Python, elija 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.
-
Para operaciones con uso intensivo de la CPU o funciones que realizan poca E/S, elija más de una vCPU
-
En el caso de las aplicaciones con un uso intensivo de E/S, como los servicios web o los trabajos por lotes, la concurrencia múltiple ofrece la mayor ventaja
Configure la máxima concurrencia de forma adecuada. Lambda elige valores predeterminados razonables para una concurrencia máxima que equilibre el consumo de recursos y el rendimiento. Ajuste esta configuración en función del uso de recursos de la función:
-
Aumente la concurrencia máxima (hasta 64 por vCPU) si las invocaciones de sus funciones utilizan muy poca CPU.
-
Reduzca la concurrencia máxima si la aplicación consume una gran cantidad de memoria y muy poca CPU.
Tenga en cuenta que los entornos de ejecución con una concurrencia muy baja pueden experimentar limitaciones y dificultades de escalado.
Scaling configuration (Escalado de configuración)
Establezca un objetivo adecuado de utilización de los recursos. De forma predeterminada, Lambda mantiene suficiente margen de maniobra para que el tráfico se duplique en 5 minutos sin limitaciones. Ajústelo en función de las características de su carga de trabajo:
-
Para cargas de trabajo muy estables o aplicaciones que no sean sensibles a las limitaciones, fije el objetivo en un nivel alto para lograr una mayor utilización y reducir los costos.
-
Para cargas de trabajo con posibles ampliaciones de tráfico, establezca los objetivos de recursos en un nivel bajo para mantener un margen de maniobra adicional.
Planifique el crecimiento del tráfico. Si el tráfico se incrementa a más del doble en 5 minutos, pueden presentarse limitaciones mientras Lambda aumenta las instancias y los entornos de ejecución. Diseñe su aplicación para gestionar las posibles limitaciones durante los períodos de escalado vertical rápido.
Seguridad
Aplique el privilegio mínimo a los permisos de PassCapacityProvider. Otorgue permisos de lambda:PassCapacityProvider solo a los proveedores de capacidad necesarios. Utilice los permisos a nivel de recursos para restringir los proveedores de capacidad que los usuarios pueden asignar a las funciones.
Supervise el uso de los proveedores de capacidad. Utilice AWS CloudTrail para supervisar las asignaciones de los proveedores de capacidad y los patrones de acceso. Esto ayuda a identificar los intentos de acceso no autorizados y garantiza el cumplimiento de las políticas de seguridad.
Separe las cargas de trabajo que no son de confianza. No confíe en los contenedores para el aislamiento de seguridad entre cargas de trabajo que no sean de confianza. Utilice distintos proveedores de capacidad para separar las cargas de trabajo en las que no se confíe mutuamente.
Optimización de costos
Aproveche las opciones de precios de EC2. Aproveche los Savings Plans y las instancias reservadas de EC2 para reducir los costos. Estas opciones de precios se aplican al cómputo de EC2 subyacente (no se descuenta la tarifa de administración del 15 %).
Optimice para cargas de trabajo estables. Las instancias administradas de Lambda son las más adecuadas para funciones de estado estable con tráfico predecible de gran volumen. Para los patrones con ampliación de tráfico, Lambda (predeterminado) puede ser más rentable.
Supervise la utilización de recursos. Realice un seguimiento de las métricas de CloudWatch para comprender la utilización de la CPU y la memoria. Ajuste la asignación de memoria de las funciones y la selección del tipo de instancia según los patrones de uso reales para optimizar los costos.
Supervisión y observabilidad
Supervise las métricas de los proveedores de capacidad. Realice un seguimiento de las métricas a nivel del proveedor de capacidad, incluidas CPUUtilization, MemoryUtilization, vCPUAvailable y MemoryAvailable para garantizar que haya suficientes recursos disponibles para sus cargas de trabajo.
Supervise las métricas del entorno de ejecución. Realice un seguimiento de las métricas a nivel del entorno de ejecución, incluidas ExecutionEnvironmentConcurrency y ExecutionEnvironmentConcurrencyLimit, para comprender el comportamiento de escalado e identificar posibles limitaciones.
Configure las alarmas de CloudWatch. Cree alarmas de CloudWatch para las métricas clave a fin de identificar los problemas de forma proactiva:
-
Uso elevado de la CPU o la memoria
-
Poca capacidad disponible
-
Aproximación de los límites de concurrencia
Consideraciones específicas del tiempo de ejecución
Siga las prácticas recomendadas específicas del tiempo de ejecución. Cada tiempo de ejecución gestiona la concurrencia múltiple de forma diferente. Consulte las guías específicas sobre el tiempo de ejecución para obtener recomendaciones detalladas:
-
Java: utilice colecciones seguras para subprocesos,
AtomicInteger, yThreadLocalpara el estado específico de la solicitud. -
Node.js: utilice InvokeStore para todos los estados específicos de la solicitud y evite las variables globales.
-
Python: utilice nombres de archivo únicos en
/tmpcon los identificadores de solicitud y considere el aislamiento de la memoria basado en procesos.
Haga pruebas para detectar problemas de seguridad y concurrencia de los subprocesos. Antes de implementarlas en producción, compruebe minuciosamente sus funciones para detectar problemas de seguridad de los subprocesos, condiciones de carrera y aislamiento de estado adecuado bajo carga simultánea.
Siguientes pasos
-
Obtenga información sobre los proveedores de capacidad para las instancias administradas de Lambda.
-
Conozca el escalado de las instancias administradas de Lambda.
-
Revise las guías específicas del tiempo de ejecución para Java, Node.js y Python.
-
Configure la conectividad de VPC para sus proveedores de capacidad.
-
Supervise las instancias administradas de Lambda con las métricas de CloudWatch.