はじめに
Lambdaでpsycopg2を使うためには、デプロイパッケージを作成しアップロードする必要があります。
(複数のLambda関数で使用する場合など、Lambdaレイヤーを作成し共通部品化する方法もあります。)
参考
デプロイパッケージの作成
$ 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にアップロード
$ aws s3 cp hoge-function/my-deployment-package.zip S3://{Bucket-name}/{Path}/~
今回は、S3にアップロードし、LambdaコンソールからS3バケットを指定し、デプロイパッケージをアップロードします。
以下の手順でアップロードすれば完了です。
#トラブルシューティング
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'psycopg2._psycopg'
関数実行時に上記エラーが出ました。
私の場合は、ライブラリをインストールした環境のpythonバージョンとLambdaのランタイムバージョンを合わせることで解決しました。