Log

いろいろ

psycopg2のLambdaレイヤーを作成する

タイトル通りです。Lambdaで外部ライブラリを使うためにレイヤーをつくります。レイヤーとはLambda関数で利用できる共通ライブラリのようなものです。多分。

Lambda レイヤーでの作業 - AWS Lambda

レイヤーは他人へ共有可能です。psycopg2を公開している方もいました。お好きなARNを指定してレイヤーを追加すれば、Lambda関数内でpsycopg2をimportできるようになります。

GitHub - jetbridge/psycopg2-lambda-layer: psycopg2 Lambda Layer

自分でつくる場合も簡単です。公式にバッチリと手順が載っています。

Docker でシミュレートされた環境を使用して Lambda レイヤーを作成する | AWS re:Post

実際にzipファイルの作成まで試してみたコード。

$ mkdir psycopg2-3.9
$ cd psycopg2-3.9
$ echo 'psycopg2-binary' > requirements.txt
$ docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.9" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.9/site-packages/; exit"
$ zip -r psycopg2-3.9.zip python > /dev/null

なお、インストールしているパッケージはpsycopg2ではなくスタンドアロン版のpsycopg2-binaryです。

GitHub - psycopg/psycopg2: PostgreSQL database adapter for the Python programming language

You can also obtain a stand-alone package, not requiring a compiler or external libraries, by installing the psycopg2-binary package from PyPI:

通常のpsycopg2では静的リンクに設定を変更してビルドする必要があるため、そうした手間の発生しないpsycopg2-binaryが便利です。psycopg2の静的リンクを試みる場合は下記を参考に。

AWS Lambda Pythonからpsycopg2でRDS PostgreSQLに接続する | DevelopersIO

こうして作成したzipファイルをレイヤーに登録して完了です。

マネジメントコンソールを触っていて気づいたのですが、コンテナイメージを元にLambda関数を作成できるようになっていました。単に外部ライブラリを使いたいだけであればこちらが便利そうです。おわり。