Pythonを使用してAlexaアプリを作成するチュートリアルに従いました。
すべての手順を正常に実行し、アプリを動作させることができました。pythonコードを変更し、import requests
などの外部ライブラリまたはpipを使用してインストールする他のライブラリを使用したい。ラムダ関数をセットアップして、マシンにローカルにインストールするpipパッケージを含めるにはどうすればよいですか?
Amazon公式ドキュメントリンクで説明されているように、 here pythonがあるフォルダーに必要なパッケージをインストールした後、すべてのフォルダーの内容のZipを作成するのと同じくらい簡単です。 _ラムダコード。
Vineethが彼のコメントで指摘したように、インラインコードエディターからZipファイルアップロードアプローチに移行する最初のステップは、構成設定の下でラムダ関数ハンドラー名を変更してpythonスクリプトファイル名を含めることですラムダハンドラを保持します。
lambda_handler => {your-python-script-file-name} .lambda_handler。
python-lambda や lambda-uploader のような他のソリューションは、アップロードプロセスと最も重要なローカルテストの簡素化に役立ちます。これらは、開発の時間を大幅に節約します。
公式ドキュメント はかなり良いです。簡単に言うと、ラムダ関数のコードとトップレベルで使用するすべての外部ライブラリの両方を含むディレクトリのZipファイルを作成する必要があります。
それをシミュレートするには、virtualenvを非アクティブにし、必要なすべてのライブラリを作業ディレクトリ(コマンドラインでスクリプトを呼び出す場合は常にsys.path
にあります)にコピーし、スクリプトがまだ機能するかどうかを確認します。
@ d3mingの答えを反映して、この時点でフレームワークは良い方法です。展開パッケージを手動で作成することは不可能ではありませんが、パッケージのコンパイル済みコードをアップロードする必要があります。また、Linux以外のシステムでそのコードをコンパイルする場合、システム間で問題が発生する可能性がありますまた、Lambda関数のデプロイされた環境は高いです。
その後、LinuxマシンまたはDockerコンテナでコードをコンパイルすることにより、この問題を回避できます。しかし、その複雑さのすべての間に、フレームワークを採用することでさらに多くを得ることができます。
サーバーレス はよく採用されており、カスタムpythonパッケージをサポートしています。 Dockerと統合してpython依存関係をコンパイルし、展開パッケージをビルドします。
これに関する完全なチュートリアルを探している場合は、 Python Lambda関数のチュートリアルをここに書きました。
この特定の問題を解決するために、 juniper というライブラリを使用しています。一言で言えば、あなたがする必要があるのは、次のような非常に単純なマニフェストファイルを作成することです。
functions:
# Name the Zip file you want juni to create
router:
# Where are your dependencies located?
requirements: ./src/requirements.txt.
# Your source code.
include:
- ./src/lambda_function.py
このマニフェストファイルからjuni build
を呼び出すと、Zipファイルアーティファクトが作成されます。このファイルには、requirements.txtで指定したすべての依存関係が含まれます。
コマンドはこのファイルを作成します./dist/router.Zip
。このファイルは、samテンプレートと組み合わせて使用しています。ただし、そのZipを使用してコンソールにアップロードするか、awscliを使用してアップロードできます。