Lambda で外部ライブラリ(psycopg2)を使いたい!

外部ライブライを使うまでの方法をまとめました

Lambda で外部ライブラリ(psycopg2)を使いたい!
目次

TL;DR


本記事でわかることは以下の通りです。

☆ Lambdaで外部ライブラリをインポートし、使うまでの方法
☆ ライブラリをローカルでインストールした環境で使用しているpythonバージョンとlambdaのバージョンは合わせる必要がある

 

はじめに


Lambdaでpsycopg2を使うためには、ローカル環境でデプロイパッケージを作成しアップロードする必要があります。
(複数のLambda関数で使用する場合など、Lambdaレイヤーを作成し共通部品化する方法もあります。)  

参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package.html

 

デプロイパッケージの作成


$ mkdir -p hoge-function/package
$ touch hoge-function/lambda_function.py
$ pip install psycopg2-binary -t ./hoge-function/package/

**ディレクトリ構成 (zip前)
hoge-function
| lambda_function.py
| package
  | psycopg2-binary
  | psycopg2-binary-info

$ cd ./hoge-function/package/

# psycopg2-binaryをzipファイルに含める
$ zip -r ../my-deployment-package.zip .

$ cd ..

# lambda_function.pyをzipファイルに含める
$ zip -r ../my-deployment-package.zip lambda_function.py

**フォルダ構成(zip後)
hoge-function
| my-deployment-package.zip
| lambda_function.py
| package
  | psycopg2-binary
  | psycopg2-binary-info

必要最小限のものだけをインストールしたいのでpsycopg2-binary をインストールしています。
(外部ライブラリやコンパイラが必要なくスタンドアローンなパッケージとして作成されているもの)

 

Lambdaにアップロード


* 流れ
  1. S3にアップロード
  2. lambdaでS3バケットからデプロイパッケージをインポート

 

$ aws s3 cp hoge-function/my-deployment-package.zip S3://{Bucket-name}/{Path}/~

今回は、S3にアップロードし、LambdaコンソールからS3バケットを指定し、デプロイパッケージをアップロードします。
以下の手順でアップロードすれば完了です。

スクリーンショット 2022-02-05 10.23.12.png スクリーンショット 2022-02-05 10.22.57.png

 

トラブルシューティング


[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'psycopg2._psycopg'

関数実行時に上記エラーが出ました。

私の場合は、ライブラリをインストールした環境のpythonバージョンとLambdaのランタイムバージョンを合わせることで解決しました。

スクリーンショット 2022-02-05 10.28.15.png