AWS Lambda LayersでpythonやNodejsのzipを作る便利なやり方

AWS Lambda Layersの発表により、Lambdaで外部ライブラリを使うのが容易になりました。

Macで外部ライブラリをアップするためには次のようにします。


python

mkdir python

pip install -t ./python numpy #(入れたいモジュール名)
zip -r upload.zip ./python


node

mkdir nodejs

npm install -p ./nodejs lodash #(入れたいモジュール名)
zip -r upload.zip ./nodejs


この方法の問題


  • Macでライブラリのzipを作ると、lambdaで動かないことがある

  • Windowsの標準zipでは、lambdaにアップしてもダメ


どうする?

GitlabのCIでzipを作ってしまえば、Amazon Linuxの環境で作ったzipを簡単に手に入れることができます


Gitlab


  • アカウント作成

  • プロジェクト作成

をすませてください。


実際のci用ファイル

.gitlab-ci.ymlを作成します。

WEBコンソールから作業しちゃっていいと思います。

内容は下記のとおりです。

stages:

- pymodule_zip
- nodemodule_zip

pymodule_zip:
image: lambci/lambda:build-python3.7
stage: pymodule_zip
artifacts:
paths:
- python
script:
- mkdir python
- pip install ${PYTHON_PACKAGES} -t ./python
only:
variables:
- $PYTHON_PACKAGES

nodemodule_zip:
image: lambci/lambda:build-nodejs8.10
stage: nodemodule_zip
artifacts:
paths:
- nodejs
script:
- mkdir nodejs
- npm i --prefix nodejs ${NODE_PACKAGES}
only:
variables:
- $NODE_PACKAGES


CIを環境変数付きで走らせます

PYTHON_PACKAGESでpythonのライブラリのzipを

NODE_PACKAGESでnodeのライブラリのzipを

作れるようになります