Webベースのエディターを使用して、いくつかのLambda関数を作成しました。ここまでは順調ですね。モジュール(promiseのQなど)を使用して、これらの拡張を開始したいと思います。モジュールをLambdaに送信する方法がわからないため、モジュールを自分の関数で使用できます。
this を読みましたが、EC2をセットアップし、そこからLambda関数を実行する必要があるようです。関数を作成するときにZipをアップロードするメカニズムがありますが、ローカルで開発された関数を送信する必要があるようです。私はWebベースのエディターで作業しているので、奇妙なワークフローのようです。
Lambda関数で使用するためにいくつかのモジュールを単純にデプロイするにはどうすればよいですか?
.Zip
ファイルをアップロードせずにNPMモジュールをロードすることはできませんが、実際にはこのプロセスを2つのクイックコマンドラインにまで減らすことができます。
方法は次のとおりです。
Lambda関数ファイルを別のディレクトリに配置します。これは、Lambda用にnpm
パッケージをローカルにインストールし、Lambdaにアップロードするものを分離してテストできるようにするためです。
手順1で作成した別のLambdaディレクトリにいる間に、npm install packageName
を使用してNPMパッケージをローカルにインストールします。
ローカルで実行するときに関数が機能することを確認します:node lambdaFunc.js
(コード内の2つのexport.handler
行をコメントアウトして、ローカルでNodeで実行するようにコードを調整できます)。
Lambdaのディレクトリに移動し、contentsを圧縮します。ディレクトリ自体を含めるにはnotを確認してください。
Zip -r lambdaFunc.Zip .
aws-cli
がインストールされている場合、あなたの生活をもっと楽にしたいなら持っていることをお勧めします。次のコマンドを入力できます。
aws lambda update-function-code --function-name lambdaFunc \
--Zip-file fileb://~/path/to/your/lambdaFunc.Zip
(あなたが私がしたように疑問に思った場合のために、上記のlambdaFunc部分の周りに引用符はありません)
これで、Lambdaコンソールでtestをクリックできます。
上記のコマンドの両方に短いエイリアスを追加することをお勧めします。はるかに長いLambda更新コマンドのために私が持っているものは次のとおりです。
alias up="aws lambda update-function-code --function-name lambdaFunc \
--Zip-file fileb://~/path/to/your/lambdaFunc.Zip"
Lambdaにnpmモジュールを含めるには、.Zip
ファイルが必要です。そして、実際にはLambda Webエディターをほとんど何にも使用すべきではありません。実動コードと同様に、ローカルで開発し、gitにコミットするなどしてください。
1)私のLambda関数は通常、より大きなプロジェクトのヘルパーユーティリティであるため、その中に/ aws/lambdasディレクトリを作成して格納します。
2)各ラムダディレクトリには、関数コードを含むindex.jsファイル、package.json依存関係を定義するファイル、および/ node_modulesサブディレクトリ。 (package.jsonファイルはLambdaによって使用されません。ローカルでnpm install
コマンドを実行できるようにするためです。)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3)npmのインストールと圧縮から生成されたファイルがリポジトリを乱雑にしないように、すべてのnode_modulesディレクトリと.Zipファイルを.gitignoreします。
。gitignore:
# Ignore node_modules
**/node_modules
# Ignore any Zip files
*.Zip
4)モジュールをインストールし、ローカルで開発およびテストする
5)ラムダディレクトリを.Zipし、コンソールからアップロードします。
(重要:FinderからMacの「圧縮」ユーティリティを使用してファイルを圧縮しないでください!ディレクトリのルート内からCLIからZipを実行する必要があります- こちら を参照
Zip -r ../yourfilename.Zip *
Node.jsのAWS Lambda Deployment Package-AWS Lambda も参照してください。
注:
PhantomJSなどのモジュールがOS固有のバイナリをビルドするため、OSXでローカルにビルドされたノードパッケージがLambdaで失敗するという問題が発生する場合があります。
サーバーレスフレームワークを使用すると、次のようなことができるようになります。
plugins: - serverless-webpack custom: webpackIncludeModules: forceInclude: - <your package name> (for example: node-fetch)
2.次にLambda関数を作成し、serverless deploy
でデプロイします。serverless.ymlに含まれるパッケージがそこにあります。
サーバーレスの詳細: https://serverless.com/framework/docs/providers/aws/guide/quick-start/
これでLambdaレイヤーを使用できるようになりました。必要なパッケージを含むレイヤーを追加するだけで、完全に実行されます。
この投稿に従ってください: https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e