はじめに
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