Amazon Lambdaにまとめてアップロードするやつ

https://github.com/r7kamura/api-gateway-lambda-example

Amazon API GatewayAmazon Lambdaを一緒に管理できるようなツールをつくろうとしてて、とりあえずサンプルアプリをつくりながら徐々にツールに切り出していこうという方針でやってみている。

.
|-- README.md
|-- functions
|   |-- function1
|   |   |-- package.json
|   |   `-- src
|   |       `-- index.js
|   `-- function2
|       |-- package.json
|       `-- src
|           `-- index.js
|-- gulpfile.js
`-- package.json

サンプルアプリは手短に言うと上のようなファイル構成になっていて、作成したいAmazon Lambdaの関数ごとにfunctionsディレクトリ内に更にディレクトリをつくっていくルールにしてある。npm run <command> で実行できるコマンドが幾つか定義されている。

$ npm run
Scripts available in api-gateway-lambda-example via `npm run-script`:
  bundle
    gulp bundle
  compile
    gulp compile
  upload
    gulp upload
  zip
    gulp zip

個々のfunctionごとにpackage.jsonが用意されていて、npm run bundle を使うと必要なnode_modulesがそれぞれインストールされる。npm run compile を使うと、個々のfunctionのsrcディレクトリ内のJavaScriptコンパイルされて、それぞれのdistディレクトリにまとめられる。npm run zip を使うと、distディレクトリの内容がdist.zipに圧縮される。Amazon LambdaにコードをアップロードするためにZIPにしている。npm run upload を使うと、個々のdist.zipをAmazon Lambdaにアップロードしてくれるようになっている。諸々のタスクを実行するとこういうのが出来上がる。

image

この辺の記事の内容と組み合わせると、まず必要なLambdaの関数をまとめてつくったあと、API Gatewayのエンドポイントをスキーマファイルか何かを元に定義しつつ、各エンドポイントとLambdaの関数と紐付ける、というのが自動化できそう。