Estoy tratando de usar el marco serverless
para crear e implementar una función de AWS Lambda. vendored
una carpeta llamada vendored
en la raíz del proyecto e instalé (usando pip install
) las dependencias de la función. Sin embargo, cada vez que bash ejecutarlo (usando la serverless function run
) recibí un error:
Sin servidor: Ejecutando isNewUser …
Sin servidor: ADVERTENCIA: Esta variable no está definida: región
Sin servidor: —————–
Serverless: Falló – Este error fue devuelto:
Serverless: {“excepción”: [“Traceback (última llamada más reciente): \ n”, “Archivo \” / inicio / fernando / .nvm / versiones / nodo / v5.10.1 / bin / serverless-run-python-handler \ “, línea 170, en \ n handler = import_program_as_module (ruta) \ n”, “File \” / home / fernando / .nvm / versions / node / v5.10.1 / bin / serverless-run-python-handler \ ” , línea 149, en import_program_as_module \ n module = make_module_from_file (‘lambda_handler’, handler_file) \ n “,” File \ “/ home / fernando / .nvm / versiones / node / v5.10.1 / bin / serverless-run-python- handler \ “, línea 129, en make_module_from_file \ n py_source_description \ n”, “File \” / home / fernando / workspace / os-cac / isNewUser / handler.py \ “, línea 11, in \ n de vtex.order import Order \ n “,” ImportError: No hay un módulo llamado vtex.order \ n “],” success “: false} Sin servidor: Mensaje de excepción de Python
Serverless: Traceback (última llamada más reciente):, archivo “/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”, línea 170, en handler = import_program_as_module (ruta) , Archivo “/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”, línea 149, en import_program_as_module module = make_module_from_file (‘lambda_handler’, handler_file), File / home /fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler “, línea 129, en make_module_from_file py_source_description, File” /home/fernando/workspace/os-cac/isNewUser/handler.py “, línea 11, desde vtex.order import Order, ImportError: no hay módulo llamado vtex.order`
vtex.order
es un módulo importado en handler.py
La estructura de mi proyecto es algo así como:
/root/ | |--_meta/ |--vendored/ |--dependencies... |--function-name/ |--handler.py |--event.json |--s-function.json |--requirements.txt |--admin.env |--package.json |--s-project.json |--s-resources-cf.json |--s-project.json
¿Hay algo que estoy haciendo mal? ¿Debería configurar de alguna manera mi función para incluir las dependencias del proveedor?
Aquí hay algunos pasos que deberían hacer que funcione:
s-function.json
tenga el nombre de la función en su ruta: "handler": "function-name/handler.handler",
en handler.py
agrega lo siguiente:
import os import sys here = os.path.dirname(os.path.realpath(__file__)) sys.path.append(os.path.join(here, "../vendored")) from vtex.order import Order
Eso es. Déjame saber si funcionó.
Recomiendo usar el complemento sin requisitos de python para incluir paquetes instalados a través de pip
Seguí los siguientes pasos para desplegar con dependencias:
Creé un directorio para dependencias en la raíz del proyecto mkdir .vendor
Agregue las dependencias en el archivo Requirements.txt manualmente o use pip freeze > requirements.txt
Actualizar el archivo serverless.yml
package: include: - .vendor/**
import sys sys.path.insert(0, './.vendor')
pip install -r requirements.txt -t .vendor
Ahora el serverless deploy
cargará la función con dependencias.