1. Si tiene una pregunta y no una solicitud de error / función, hágalo en http://forum.serverless.com 2. Verifique si ya existe un problema para que no haya duplicados 3. Consulte y siga nuestras Pautas: https://github.com/serverless/serverless/blob/master/CONTRIBUTING.md 4. Complete toda la plantilla para que tengamos una buena descripción general del problema 5. No elimine ninguna sección de la plantilla. Si algo no es aplicable, déjelo en blanco, pero déjelo en el número 6. Siga la plantilla, de lo contrario, tendremos que pedirle que lo actualice.
Para informes de errores:
Usando serverless v1.6.0
Estoy tratando de ejecutar una función lambda de Python localmente, pero recibo un error de que no se pudo encontrar mi módulo controlador.
Anticipaba que esto funcionaría ya que esta función se implementó en # 2862
Sospecho que esto podría deberse a la estructura de mi carpeta. En mi caso, el código de Python se almacena en src/serverless_lambda.py
, uso un entorno virtual activado y setup.py.
El setup.py
está configurado de tal manera que Python puede encontrar módulos en la carpeta src/*
pero parece que serverless invoke local
no puede encontrar el paquete de la misma forma que Python / pip.
(venv) $:serverless-lambda-template gmetzker$ serverless invoke local --function serverlessLambda --data '{"command": "joke"}'
Traceback (most recent call last):
File "/Users/gmetzker/hli-git/serverless-lambda-template/node_modules/serverless/lib/plugins/aws/invokeLocal/invoke.py", line 56, in <modul
e>
module = import_module(args.handler_path.replace('/', '.'))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named serverless_lambda
Así es como creo la configuración de mi proyecto:
-- src
-- __init__.py
-- serverless_lambda.py
-- serverless.yml
-- setup.py
-- venv
virtualenv venv
source ./venv/bin/activate
setup.py
en el directorio raíz para buscar módulos en /src/serverless_lambda
from setuptools import Command, find_packages, setup
setup(
name='serverless-lambda',
version="1.0.0",
author = 'Gary Metzker',
py_modules='src/serverless_lambda',
install_requires=[
'boto3',
'requests'
],
packages = find_packages('src'),
package_dir={'':'src'},
extras_require = {
'test': ['coverage', 'pytest', 'pytest-cov', 'pytest-json', 'mock'],
},
entry_points='''
[console_scripts]
serverless-lambda=serverless_lambda:main
'''
)
setup.py
)pip install --editable .
serverless.yml
en la raíz del proyecto.
service: serverlessLambdaTemplate
custom:
stage: ${opt:stage, self:provider.stage}
lambdaBaseName: serverless-template-lambda
provider:
name: aws
runtime: python2.7
stage: dev
region: us-west-2
package:
# Use package.sh to create package.zip before deploying.
artifact: package.zip
functions:
serverlessLambda:
name: serverless-template-lambda-${self:custom.stage}
handler: serverless_lambda.entry_point
serverless invoke local --function serverlessLambda --data '{"command": "joke"}'
La otra cosa a tener en cuenta, cuando implemento mi lambda, normalmente tengo un script package.sh
separado que uso para crear el artefacto package.zip
. En el script, comprima todos los archivos *.py
de src/*
en la raíz del zip. Además, los paquetes de sitio del entorno virtual se agregan al zip.
setup.py
y se registró en el entorno virtual con pip install --editable .
.Debería poder encontrar src/serverless_lambda.py
¿Cuál fue la configuración que usaste?
Véase más arriba.
¿Qué seguimiento de pila o mensaje de error de su proveedor vio?
Traceback (most recent call last):
File "/Users/gmetzker/hli-git/serverless-lambda-template/node_modules/serverless/lib/plugins/aws/invokeLocal/invoke.py", line 56, in <modul
e>
module = import_module(args.handler_path.replace('/', '.'))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named serverless_lambda
Para propuestas de funciones:
/src/lambda_handler.py
para que la estructura del directorio sea más limpia y el código fuente esté separado.setup.py
para instalar limpiamente las dependencias de Python y especificar las ubicaciones de los paquetes y módulos.Utilice package.sh
script /src/*.py
y archivos de entorno virtual en un lambda.zip. Hago esto por separado para nuestro sistema CI / CD.
Problemas similares o dependientes:
1.6.0
Sistema operativo :
OSX
Seguimiento de pila :
Para el empaquetado para la implementación, es posible que desee verificar los requisitos de python sin servidor. Yo también lo escribí, pero aún necesito una versión estable de 2.0.0.
Cerrar este problema desde # 3346 debería haberlo resuelto (ver: https://github.com/serverless/serverless/pull/3346#issuecomment-285469254).
¡No dude en volver a abrir si el problema persiste!
No estoy seguro si esto está relacionado con el problema mencionado anteriormente, pero si alguien viene aquí a través de Google, intente esto:
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'
Comentario más útil
No estoy seguro si esto está relacionado con el problema mencionado anteriormente, pero si alguien viene aquí a través de Google, intente esto:
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'