2
3

More than 3 years have passed since last update.

Lambdaでの開発を楽にする。zipアップロードのシェルスクリプト

Last updated at Posted at 2020-03-15

はじめに

node.jslambdaでの開発でaws-sdk以外のライブラリ(例えばfirebase-admin)を使おうとすると、
ライブラリごとlambdaにアップロードしないといけません。そしてたいてい、サイズが大きすぎてAWSのウェブサイト上でのコードの編集ができなくなり開発効率が悪くなってしまいます。

少しでも手間を軽減するためにzipに固めるのと関数のアップロードを自動でやってくれるシェルスクリプト(upload.sh)を書きました。node.jsでなくpythonなどでもフォルダ名などが変わるだけでやることは同じです。


2020/5/5追記 AWS Lambda レイヤーを使うのがおそらく賢いやり方です。 layerが何らかの理由で使えない時(仮にそんなときが有るとして)だけこの記事は参考にしてください。

細かい設定

なお、ここでは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
2
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
2
3