Saltar al contenido

Importar un script de Python en una función Lambda

0

Buenas tardes,

Estoy aprendiendo a trabajar con SAM y estoy haciendo un proyecto con varias funciones lambda en VSC, usando Python.

Tengo una lambda que uso como Authorizer en la que importo un script de esta forma:

from parser import get_cookie

Para esto, mi estructura es la siguiente:

functions\authorizer\app.py → Lugar en donde importo el parser

functions\cookie_parser\python\parser.py → Script que quiero importar (bajo python también tengo un init.py)

Y en mi YAML tengo un layer como este:

CodeLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: CodeLayer
      ContentUri: functions/cookie_parser/
      CompatibleRuntimes:
        - python3.11
    MetaData:
      BuildMethod: python3.11

AL cual hago referencia en mi lambda con Layers: - !Ref CodeLayer

Si bien esto funciona de forma correcta, no sé si sea la manera más limpia en cuanto a estructura... Me ayudaría si alguien que ha trabajado con una estructura similar comparte un poco de su experiencia.

preguntada hace 2 meses49 visualizaciones
1 Respuesta
0

Para importar un script de Python en una función Lambda, tu enfoque actual usando capas (layers) es una buena práctica, aunque hay algunas consideraciones que podrían mejorar tu estructura.

El uso de capas Lambda es adecuado para compartir código entre múltiples funciones. Tu estructura actual funciona, pero podrías considerar algunas mejoras:

  1. Estructura de directorios: Para una capa Lambda con código Python, la estructura recomendada es colocar tus módulos dentro de un directorio python en la raíz de la capa. Tu estructura actual parece correcta con functions/cookie_parser/python/parser.py.

  2. Importación: La forma en que estás importando (from parser import get_cookie) funcionará siempre que el directorio python esté en el PYTHONPATH. Cuando se despliega, Lambda añade automáticamente el directorio /opt/python al PYTHONPATH, que es donde se instala tu capa.

  3. Configuración en SAM: Tu configuración de la capa en el template SAM es correcta. Estás especificando el runtime compatible (python3.11) y haciendo referencia a la capa desde tu función Lambda.

Una alternativa a considerar sería organizar tu código como un paquete Python propiamente dicho, con su setup.py correspondiente, lo que facilitaría las pruebas locales y el mantenimiento.

Para proyectos más grandes, podrías considerar separar el código compartido en un repositorio independiente y publicarlo como una capa Lambda separada que pueda ser referenciada por múltiples proyectos.

Si estás utilizando Python 3.13, que ahora está disponible en AWS Lambda, asegúrate de actualizar la configuración de compatibilidad de tu capa.

Recuerda que si necesitas incluir bibliotecas externas como requests (que no viene por defecto en el entorno Lambda), también deberás incluirlas en tu capa o crear una capa separada para dependencias.
Sources
Community | Step-by-Step Guide to Creating an AWS Lambda Function Layer
Python 3.13 runtime now available in AWS Lambda | AWS Compute Blog
Community | Using the AWS Parameters and Secrets Lambda Extension with Python: A Practical Example

respondido hace 2 meses
EXPERTO
revisado hace 2 meses

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.