はじめに
node.jsとlambdaでの開発でaws-sdk以外のライブラリ(例えばfirebase-admin)を使おうとすると、
ライブラリごとlambdaにアップロードしないといけません。そしてたいてい、サイズが大きすぎてAWSのウェブサイト上でのコードの編集ができなくなり開発効率が悪くなってしまいます。
少しでも手間を軽減するためにzipに固めるのと関数のアップロードを自動でやってくれるシェルスクリプト(upload.sh)を書きました。node.jsでなくpythonなどでもフォルダ名などが変わるだけでやることは同じです。
細かい設定
なお、ここではfirebase-adminの秘密鍵ファイル(参考)をprivatekey.jsonとしておいてあります。またaws-cliをインストールしてあり、デフォルトのprofileでlambdaアップロードができることが前提です。別のプロファイルを使いたい場合は--profile YYYを追加しましょう。npm install XXXでほしいnode.jsモジュールがnode_modules下にインストールされていることも前提です。
upload.sh
zip -rq XXX.zip node_modules/ index.js privatekey.json
aws lambda update-function-code \
--function-name FXXXX \
--zip-file fileb:///home/xxx/Documents/xxx.zip \
--publish
- XXX.zip: アップロードするzipファイルの名前です。
-
node_modules/,index.js,privatekey.jsonが今回zipに固めたいフォルダ/ファイルです。お使いの環境に合わせて変えてください。 - FXXXX: アップロードする関数の名前です。
- fileb:///home/xxx/Documents/xxx.zip: 作成したzipファイルの絶対パスです。
fileb:///から始まります。
フォルダ構造
├── index.js
├── invoke.sh
├── node_modules/
├── package-lock.json
├── privatekey.json
└── upload.sh
使い方
bash upload.sh
実行もシェルスクリプトから行う
invoke.sh
aws lambda invoke --function-name FXXX --payload '{"text":"hello"}' out --log-type Tail --query 'LogResult' --output text | base64 -d
cat out
実行
bash invoke.sh