Help us understand the problem. What is going on with this article?

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

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があります。

https://github.com/jkehler/awslambda-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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away