LoginSignup
5
3

More than 5 years have passed since last update.

nodejsのAWS Lambda functionをビルド/アップロードするシェルスクリプトを書いてみた

Last updated at Posted at 2017-01-30

はじめに

AWS Lambdaのfunctionを更新するたびにコンソールやS3からアップロードするのが面倒だったので、nodejsのパッケージをビルドしてLambdaへアップロードするシェルスクリプトを書いてみました。
リポジトリはこちら:
https://github.com/suhirotaka/utility/blob/master/shell/upload_node_lambda_function.sh

使い方

upload_node_lambda_function.sh <SOURCE_DIRECTORY> <FUNCTION_NAME>
SOURCE_DIRECTORYにソースが入っているディレクトリ、FUNCTION_NAMEにLambdaのfunction名を指定します。Lambdaのハンドラを指定しているファイルはsource_directoryの直下へ置いてください。

SOURCE_DIRECTORYのディレクトリ構成は以下のように、nodeのスクリプトとpackage.jsonを含めます。package.jsonに書かれた依存パッケージをnpm installしてから、jsファイルをzipで固めてLambdaへアップロードします。

source_directory - myFunction1.js
                   myFunction2.js
                   ...
                   package.json

ちょっとハマったこと

  • Lambdaへのアップロードでは、fileb://プロトコルを使用する必要があります。ずっとfile://を使ってアップロードできないなーと悩んでいたら、ちゃんとドキュメントに載っていました。binaryの"b"なんでしょうが、初めて見るプロトコルでした。。
  • zipで固めるとき、zip -r out.zip source_directoryのようにディレクトリごと固めてしまうと、Lambdaで"Module not found"のエラーになります。これも悩んだのですが、ハンドラをexportsしているファイルがパッケージのルートにないのが原因でした。zip -r out.zip *.js node_modulesのように書かないといけません。
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3