1.バグ/機能のリクエストではなく質問がある場合は、http://forum.serverless.comで質問してください。2。重複がないように、問題がすでに存在するかどうかを確認してください。3。チェックしてガイドラインに従ってください。 https://github.com/serverless/serverless/blob/master/CONTRIBUTING.md 4.テンプレート全体に記入して、問題の概要を把握します。5。テンプレートのどのセクションも削除しないでください。 該当しないものがある場合は、空のままにして、問題6に残してください。テンプレートに従ってください。そうでない場合は、更新するように求められます。
バグレポートの場合:
サーバーレスv1.6.0
を使用してPythonラムダ関数をローカルで実行しようとしていますが、ハンドラーモジュールが見つからないというエラーが表示されます。
この機能が#2862で実装されたので、これが機能することを期待していました
これは私のフォルダ構造が原因である可能性があります。 私の場合、Pythonコードはsrc/serverless_lambda.py
に保存されており、アクティブ化された仮想環境とsetup.pyを使用しています。
setup.py
は、Pythonがsrc/*
フォルダー内のモジュールを見つけることができるように設定されていますが、 serverless invoke local
は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
これが私のプロジェクトのセットアップを作成する方法です:
-- src
-- __init__.py
-- serverless_lambda.py
-- serverless.yml
-- setup.py
-- venv
virtualenv venv
source ./venv/bin/activate
setup.py
を作成して、 /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
ファイルを作成します。
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"}'
もう1つ注意すべき点は、ラムダをデプロイするとき、通常、アーティファクトpackage.zip
を作成するために使用する個別のpackage.sh
スクリプトがあります。 スクリプトで、すべての*.py
ファイルをsrc/*
からzipのルートに圧縮します。 さらに、仮想環境サイトパッケージがzipに追加されます。
setup.py
として仮想環境に登録pip install --editable .
。src/serverless_lambda.py
を見つけることができるはずです
使用した構成は何でしたか?
上記を参照。
プロバイダーからのスタックトレースまたはエラーメッセージはどのようなものでしたか?
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
機能提案の場合:
/src/lambda_handler.py
ようなネストされたフォルダに保存して、ディレクトリ構造がよりクリーンになり、ソースコードが分離されるようにします。setup.py
を使用して、Pythonの依存関係をクリーンにインストールし、パッケージとモジュールの場所を指定します。個別のpackage.sh
スクリプトを使用して、 /src/*.py
ファイルと仮想環境ファイルをlambda.zipにバンドルします。 これは、CI / CDシステムに対して個別に行います。
類似または依存する問題:
1.6.0
オペレーティングシステム:
OSX
スタックトレース:
デプロイ用のパッケージ化については、私も書いたserverless-python-requirementsをチェックアウトすることをお勧めしますが、それでも2.0.0の安定版リリースをプッシュする必要があります。
#3346で解決するはずだったので、この問題を解決しました(https://github.com/serverless/serverless/pull/3346#issuecomment-285469254を参照)。
この問題が引き続き発生する場合は、お気軽に再度開いてください。
これが上記の問題に関連しているかどうかはわかりませんが、誰かがGoogleを通じてここに来た場合は、これを試してください。
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'
最も参考になるコメント
これが上記の問題に関連しているかどうかはわかりませんが、誰かがGoogleを通じてここに来た場合は、これを試してください。
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'