|
Hoy anunciamos la disponibilidad general de AWS Lambda SnapStart para funciones de Python y .NET que ofrece un rendimiento de inicio de funciones más rápido, desde varios segundos hasta menos de un segundo, generalmente con cambios de código mínimos o nulos en Python, C#, F# y Powershell.
El 28 de noviembre de 2022, presentamos las funciones Lambda SnapStart para Java para mejorar el rendimiento de inicio hasta 10 veces. Con Lambda SnapStart, puede reducir las latencias atípicas que surgen de la inicialización de funciones, sin tener que aprovisionar recursos ni dedicar tiempo a implementar optimizaciones de rendimiento complejas.
Lambda SnapStart funciona almacenando en caché y reutilizando la memoria instantánea y el estado del disco de cualquier código de inicialización único o código que se ejecuta solo la primera vez que se invoca una función Lambda. Lambda toma un Instantánea de microVM de petardo del estado de la memoria y el disco del entorno de ejecución inicializado, cifra la instantánea y la almacena en caché para un acceso de baja latencia.
Cuando invoca la versión de la función por primera vez y a medida que las invocaciones aumentan, Lambda reanuda nuevos entornos de ejecución a partir de la instantánea almacenada en caché en lugar de inicializarlos desde cero, lo que mejora la latencia de inicio. Lambda SnapStart facilita la creación de aplicaciones altamente escalables y responsivas en Python y .NET mediante AWS Lambda.
Para las funciones de Python, la latencia de inicio desde el código de inicialización puede durar varios segundos. Algunos escenarios en los que esto puede ocurrir son: cargar dependencias (como LangChain, Numpy, Pandas y DuckDB) o usar marcos (como Flask o Django). Muchas funciones también realizan inferencias de aprendizaje automático (ML) utilizando Lambda y necesitan cargar modelos de ML durante la inicialización, un proceso que puede tardar decenas de segundos según el tamaño del modelo utilizado. El uso de Lambda SnapStart puede reducir la latencia de inicio de varios segundos a menos de un segundo en estos escenarios.
Para las funciones .NET, esperamos que la mayoría de los casos de uso se beneficien porque la compilación justo a tiempo (JIT) de .NET tarda varios segundos. La variabilidad de la latencia asociada con la inicialización de funciones Lambda ha sido una barrera de larga data para que los clientes utilicen .NET para AWS Lambda. SnapStart permite que las funciones se reanuden rápidamente almacenando en caché una instantánea de su memoria y estado del disco. Por lo tanto, la mayoría de las funciones .NET experimentarán una mejora significativa en la variabilidad de la latencia con Lambda SnapStart.
Introducción a Lambda SnapStart para Python y .NET
Para comenzar, puede utilizar la Consola de administración de AWS, la interfaz de línea de comandos de AWS (AWS CLI) o los SDK de AWS para activar, actualizar y eliminar las funciones SnapStart para Python y .NET.
En la consola de AWS Lambda, vaya a Funciones y elija su función para usar Lambda SnapStart. Seleccionar Configuraciónelegir Configuración generaly luego elija Editar. puedes ver Inicio instantáneo ajustes en el Editar configuraciones básicas página.
Puede activar funciones Lambda utilizando Python 3.12 y versiones posteriores, y .NET 8 y tiempos de ejecución administrados superiores. Elegir Versiones publicadas y luego elegir Ahorrar.
Cuando publica una nueva versión de su función, Lambda inicializa su código, crea una instantánea del entorno de ejecución inicializado y luego almacena en caché la instantánea para un acceso de baja latencia. Puede invocar la función para confirmar la activación de SnapStart.
Aquí hay un comando de AWS CLI para actualizar la configuración de la función ejecutando el update-function-configuration
comando con el --snap-start
opción.
aws lambda update-function-configuration \
--function-name lambda-python-snapstart-test \
--snap-start ApplyOn=PublishedVersions
Publicar una versión de la función con el publish-version
dominio.
aws lambda publish-version \
--function-name lambda-python-snapstart-test
Confirme que SnapStart esté activado para la versión de la función ejecutando el get-function-configuration
comando y especificando el número de versión.
aws lambda get-function-configuration \
--function-name lambda-python-snapstart-test:1
Si la respuesta muestra que OptimizationStatus
es On
y State
es Active
entonces SnapStart
está activado y hay una instantánea disponible para la versión de función especificada.
"SnapStart": {
"ApplyOn": "PublishedVersions",
"OptimizationStatus": "On"
},
"State": "Active",
Para obtener más información sobre cómo activar, actualizar y eliminar una instantánea con AWS SDK, AWS CloudFormation, AWS Serverless Application Model (AWS SAM) y AWS Cloud Development Kit (AWS CDK), visite Activación y administración de Lambda SnapStart en la Guía para desarrolladores de AWS Lambda. .
Ganchos de tiempo de ejecución
Puede utilizar enlaces de tiempo de ejecución para ejecutar código ejecutado antes de que Lambda cree una instantánea o después de que Lambda reanude una función a partir de una instantánea. Los enlaces de tiempo de ejecución son útiles para realizar operaciones de limpieza o liberación de recursos, actualizar dinámicamente la configuración u otros metadatos, integrarse con servicios o sistemas externos, como enviar notificaciones o actualizar el estado externo, o para ajustar la secuencia de inicio de su función, como mediante la precarga de dependencias.
Los enlaces de tiempo de ejecución de Python están disponibles como parte del código abierto. Restauración de instantáneas para la biblioteca Pythonque se incluye en el tiempo de ejecución administrado de Python. Esta biblioteca proporciona dos decoradores. @register_before_snapshot
ejecutar antes de que Lambda cree una instantánea y @register_after_restore
para ejecutarse cuando Lambda reanude una función a partir de una instantánea. Para obtener más información, visite Enlaces de tiempo de ejecución de Lambda SnapStart para Python en la Guía para desarrolladores de AWS Lambda.
A continuación se muestra un controlador de Python de ejemplo para mostrar cómo ejecutar código antes de realizar puntos de control y después de restaurar:
from snapshot_restore_py import register_before_snapshot, register_after_restore
def lambda_handler(event, context):
# handler code
@register_before_snapshot
def before_checkpoint():
# Logic to be executed before taking snapshots
@register_after_restore
def after_restore():
# Logic to be executed after restore
También puede utilizar enlaces de tiempo de ejecución .NET disponibles como parte del paquete Amazon.Lambda.Core (versión 2.5 o posterior) de NuGet. Esta biblioteca proporciona dos métodos. RegisterBeforeSnapshot()
para ejecutar antes de la creación de la instantánea y RegisterAfterRestore()
para ejecutar después de reanudar una función desde una instantánea. Para obtener más información, visite Enlaces de tiempo de ejecución de Lambda SnapStart para .NET en la Guía para desarrolladores de AWS Lambda.
A continuación se muestra un controlador de C# de ejemplo para mostrar cómo ejecutar código antes de realizar puntos de control y después de restaurar:
public class SampleClass
{
public SampleClass()
{
Amazon.Lambda.Core.SnapshotRestore.RegisterBeforeSnapshot(BeforeCheckpoint);
Amazon.Lambda.Core.SnapshotRestore.RegisterAfterRestore(AfterRestore);
}
private ValueTask BeforeCheckpoint()
{
// Add logic to be executed before taking the snapshot
return ValueTask.CompletedTask;
}
private ValueTask AfterRestore()
{
// Add logic to be executed after restoring the snapshot
return ValueTask.CompletedTask;
}
public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)
{
// INSERT business logic
return new APIGatewayProxyResponse
{
StatusCode = 200
};
}
}
Para aprender cómo implementar enlaces de tiempo de ejecución para su tiempo de ejecución preferido, visite Implementar código antes o después de las instantáneas de funciones Lambda en la Guía para desarrolladores de AWS Lambda.
Cosas que debes saber
Aquí hay algunas cosas que debe saber sobre Lambda SnapStart:
- Manejo de la unicidad – Si su código de inicialización genera contenido único que se incluye en la instantánea, entonces el contenido no será único cuando se reutilice en entornos de ejecución. Para mantener la unicidad al usar SnapStart, debe generar contenido único después de la inicialización, por ejemplo, si su código utiliza una generación de números aleatorios personalizada que no depende de bibliotecas integradas ni almacena en caché ninguna información, como entradas DNS que puedan caducar durante la inicialización. Para saber cómo restaurar la unicidad, visite Manejo de la unicidad con Lambda SnapStart en la Guía para desarrolladores de AWS Lambda.
- Ajuste de rendimiento – Para maximizar el rendimiento, le recomendamos que precargue las dependencias e inicialice los recursos que contribuyen a la latencia de inicio en su código de inicialización en lugar de en el controlador de funciones. Esto elimina la latencia asociada con la carga pesada de clases fuera de la ruta de invocación, optimizando el rendimiento de inicio con SnapStart.
- Mejores prácticas de networking –El estado de las conexiones que establece su función durante la fase de inicialización no está garantizado cuando Lambda reanuda su función a partir de una instantánea. En la mayoría de los casos, las conexiones de red que establece un SDK de AWS se reanudan automáticamente. Para otras conexiones, revise Maximizar el rendimiento de Lambda SnapStart en la Guía para desarrolladores de AWS Lambda.
- Funciones de monitorización – Puede monitorear sus funciones SnapStart utilizando el flujo de registros de Amazon CloudWatch, el seguimiento activo de AWS X-Ray y accediendo a datos de telemetría en tiempo real para extensiones utilizando la API de telemetría, Amazon API Gateway y métricas de URL de funciones. Para obtener más información sobre las diferencias entre las funciones de SnapStart, visite Monitoreo de Lambda SnapStart en la Guía para desarrolladores de AWS Lambda.
Ahora disponible
Las funciones AWS Lambda SnapStart para Python y .NET están disponibles hoy en EE. UU. Este (Norte de Virginia), EE. UU. Este (Ohio), EE. UU. Oeste (Oregón), Asia Pacífico (Singapur), Asia Pacífico (Sídney), Asia Pacífico (Tokio) , Regiones de AWS Europa (Frankfurt), Europa (Irlanda) y Europa (Estocolmo).
Con los tiempos de ejecución administrados de Python y .NET, existen dos tipos de cargos de SnapStart: el costo de almacenar en caché una instantánea por versión de función que publica con SnapStart habilitado y el costo de restauración cada vez que se restaura una instancia de función a partir de una instantánea. Por lo tanto, elimine las versiones de funciones no utilizadas para reducir los costos de caché de SnapStart. Para obtener más información, visite la página de precios de AWS Lambda.
Pruebe Lambda SnapStart para Python y .NET en la consola de AWS Lambda. Para obtener más información, visite la página Lambda SnapStart y envíe sus comentarios a través de AWS re: Publicación para AWS Lambda o sus contactos habituales de AWS Support.
— chany
GIPHY App Key not set. Please check settings