Log

いろいろ

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

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

Lambda レイヤーの作成と共有 - AWS Lambda

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

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

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

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

実際に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は静的リンクに設定を変更してビルドする必要があります。

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

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

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