Lambdaでawswranglerを使う

2021.10.04

CX事業本部の夏目です。

AWSでETL処理を行う際、awswranglerというPythonのモジュールを使うことも少なくありません。

今回はそれをLambdaで使う際にある問題にハマってしまったので共有します。

何が問題なのか

問題は唯一つ、非圧縮時のファイルサイズが大きいこと。

bash-4.2$ python -m venv .venv
bash-4.2$ source .venv/bin/activate
(.venv) bash-4.2$ pip install --disable-pip-version-check awswrangler==2.11.0 -t python/ 2>&1 > /dev/null
(.venv) bash-4.2$ du -sh python
292M    python

Lambdaのデプロイパッケージは非圧縮時に250MB以下である必要があります。 が、見ての通り普通にpipでインストールするとオーバーしていることがわかります。

どうすればよいのか

実はawswranglerのgithubのreleaseページでLambda Layerに登録するためのzipファイルが公開されています。

試しにダウンロードして、非圧縮時のサイズを確認してみます。

$ wget https://github.com/awslabs/aws-data-wrangler/releases/download/2.11.0/awswrangler-layer-2.11.0-py3.8.zip > /dev/null 2>&1                                                 
$ unzip awswrangler-layer-2.11.0-py3.8.zip > /dev/null 2>&1
$ du -sh python
161M    python

こちらはサイズが250MBを下回っています。 これならLayerにデプロイしてLambdaで使用することができます。

まとめ

普段通りにawswranglerをLayerにデプロイしようとして、エラーが出るのは非常に困ってました。 このzipファイルならLayerにデプロイできるのでLambdaで問題なく動かせそうです。