psycopg2とは
Python上でのPostgreSQLのクライアントです。
PostgreSQL + Pythonだったらたぶん一番有名なやつ。
Amazon RDSのAmazon Aurora, PostgreSQLを扱うのにも使えたりします。
注意
そもそもLambda+RDSの相性はあまりよくないです。
なぜAWS LambdaとRDBMSの相性が悪いかを簡単に説明する - Sweet Escape
仕様的にコネクションを多くとらない場合を想定してます。
やりたいこと
Pythonを動かすLambda上でpsycopg2を使いたい。
問題点
ローカル上ではpsycopg2は普通にpip install
すれば使えます。
Lambda上で動かすとなると、zipにしてあげるなりいい感じにCodestarとかを使ってPipelineを敷いてあげて普通のPythonのライブラリをLambda上で使うようにすればいいんじゃね?ってなります。
ただそれだとpsycopg2は動きません
python 3.x - ImportError: No module named 'psycopg2._psycopg' - Stack Overflow
対策
そんなことを解決してくれるLambda用のpsycopg2があります。
Python 3.6でLambdaを動かしている場合はこのリポジトリのpycopg2-3.6の名前をpycopg2
に変え、プロジェクトにコピーすればimport pycopg2
したらそっちを見にいってくれます。
対策+α ローカルでもLambda上でも動かしたい
ただ以上の対策だと、ローカル上で動かなくなります。
なので環境変数でEXEC_LOCAL
を用意してあげて、読み込む先を変えてあげるとどっちでも動くようになります。
※ Lambda上ではEXEC_LOCAL = 0
, ローカル上ではEXEC_LOCAL = 1
に設定すること前提です。
※ Lambda用のpsycopg2をaws_lib
ディレクトリの中に入れてあげてます。
if os.getenv("EXEC_LOCAL") == "0":
sys.path.append(os.path.join(os.path.dirname(__file__), './aws_lib'))
import psycopg2