20
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

psycopg2をローカルでもAWS Lambda上でも同じように使う

Posted at

psycopg2とは

Python上でのPostgreSQLのクライアントです。

PostgreSQL + Pythonだったらたぶん一番有名なやつ。

Amazon RDSのAmazon Aurora, PostgreSQLを扱うのにも使えたりします。

注意

そもそもLambda+RDSの相性はあまりよくないです。

Lambda+RDSはアンチパターン - Qiita

なぜ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
20
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?