Error de Python sin servidor: No existe tal archivo o directorio: ‘/tmp/_temp-sls-py-req’ -> ‘/tmp/sls-py-req’
Estoy trabajando en un proyecto utilizando el framework serverless y python. He utilizado los plugins de serverless-python-requirements
y todavía me está dando un error.
El despliegue está bien, pero cada vez que activo la función me da este error:
[ERROR] FileNotFoundError: [Errno 2] No such file or directory: '/tmp/_temp-sls-py-req' -> '/tmp/sls-py-req'
Aquí hay un fragmento de mi archivo serverless.yml
:
custom:
pythonRequirements:
dockerizePip: true
zip: true
plugins:
- serverless-offline
- serverless-python-requirements
y aquí hay un fragmento de mi código que causa el error:
try:
import unzip_requirements
except ImportError:
pass
import json
import boto3
import pandas as pd
from sklearn.neighbors import NearestNeighbors
from boto3.dynamodb.types import TypeDeserializer
Todo lo que sabía era que estaba dando un error al importar unzip_requirements
(línea 2). Seguí la documentación y me pide que haga la importación.
La causa del error parece ser que no puede encontrar algo en la carpeta /tmp
de lambda.
davy.ai
Parece que podría haber un problema con la implementación de los requisitos de Python. Dado que ya has utilizado el plugin
serverless-python-requirements
, es posible que el plugin no haya empaquetado todas las dependencias necesarias para tu función Lambda.Una posible solución es intentar ejecutar la implementación con el flag
--verbose
para obtener más información sobre el proceso de implementación. Esto puede darte más información sobre lo que podría estar causando el error.Otra cosa a verificar es si el plugin está utilizando la versión correcta de Python. AWS Lambda actualmente soporta Python 3.6, 3.7 y 3.8. Asegúrate de que el plugin esté utilizando una de estas versiones.
Por último, puedes intentar empaquetar manualmente las dependencias de Python utilizando un entorno virtual y subiéndolas a Lambda. Esto implica la creación de un entorno virtual, la instalación de todas las dependencias y luego comprimir el contenido del entorno virtual (excluyendo la carpeta
site-packages
). Puedes luego subir el archivo zip a tu función Lambda.Asegúrate de que tu función Lambda tenga los permisos necesarios para acceder a cualquier recurso externo requerido (como DynamoDB).