es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AWS SAM zip contiene todas las dependencias para cada función Lambda.

Estoy trabajando en una aplicación sin servidor que tiene 10 funciones Lambda.

Despliego los cambios de código usando sam build & sam package & sam deploy

SAM crea un archivo ZIP del código y todas las dependencias y lo sube a S3. Este ZIP se descarga cada vez que se invoca una función Lambda.

Esto crea 2 problemas.

1) El tiempo de compilación aumenta

La ejecución de sam deploy imprime File with same data already exists at (número de función Lambda – 1) veces porque carga el mismo paquete ZIP para todas las funciones Lambda. Dado que todas las funciones Lambda están en el mismo repositorio, el paquete ZIP es el mismo para todas ellas. Por alguna razón, SAM no lo entiende. ¿Se espera que creemos un nuevo repositorio de código para cada función Lambda?

2) El tamaño del archivo ZIP aumenta

Como dije anteriormente, el ZIP se descarga cada vez que (si es un inicio en frío) se invoca la función Lambda. Esto aumenta la latencia. También hay un límite de 50MB para el paquete ZIP.

Las Capas de Lambda parecen ser una solución potencial, pero parece que la configuración no es muy fácil.

¿Existe una forma de crear archivos ZIP específicos de la función Lambda utilizando SAM? En mi caso, habría 10 archivos ZIP para cada función Lambda y cada Lambda descargaría el ZIP correspondiente cuando se invoque.

¿Es posible hacer que SAM haga una compilación para cada Lambda e incluya solo las dependencias que se usan en cada una en lugar de empaquetar todas las dependencias juntas?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para una aplicación sin servidores con 10 funciones Lambda

    Al implementar una aplicación sin servidores con 10 funciones Lambda, usando sam build & sam package & sam deploy se crea un solo archivo ZIP con el código y todas las dependencias. Esto puede aumentar el tiempo de construcción y el tamaño del archivo ZIP, lo que puede causar problemas de latencia durante los arranques en frío.

    Una solución potencial es utilizar Lambda Layers, lo que permitiría separar el código y las dependencias en capas compartidas por múltiples funciones. Sin embargo, esta configuración puede ser compleja.

    Otra solución es crear archivos ZIP específicos para cada función Lambda utilizando SAM. Esto implica crear un paquete de implementación separado para cada función Lambda e incluir solamente las dependencias que ésta realmente utiliza. Esto se puede lograr mediante una combinación de sam build y sam package con los argumentos apropiados.

    # Construir y empaquetar la función Lambda 1 con sólo las dependencias necesarias
    sam build -u && sam package --s3-bucket <bucket_name> --s3-prefix <prefix>/function1 --output-template-file packaged-function1.yaml --region <region>
    
    # Construir y empaquetar la función Lambda 2 con sólo las dependencias necesarias
    sam build -u && sam package --s3-bucket <bucket_name> --s3-prefix <prefix>/function2 --output-template-file packaged-function2.yaml --region <region>
    
    # ...
    
    # Desplegar cada función Lambda utilizando su paquete de implementación específico
    sam deploy --template-file packaged-function1.yaml --stack-name <stack_name> --region <region>
    sam deploy --template-file packaged-function2.yaml --stack-name <stack_name> --region <region>
    # ...
    

    Al crear paquetes de implementación separados, se puede asegurar que cada función Lambda sólo descargue las dependencias que necesita, reduciendo el tamaño del archivo ZIP y mejorando la latencia durante los arranques en frío.

Comments are closed.