はじめに

質問させていただきます。
AWS lambda上でサイトをクロールし、得たデータをherokuのpostgresqlに保存しようと思っています。
試行錯誤した結果、下記のエラーでつまづいてしまっております。


発生しているエラー

lambda上で実行したところ、下記のエラーが発生しました。

START RequestId: efa28639-4100-11e6-a067-15a65cffa43f Version: $LATEST
Unable to import module 'lambda_function': /var/task/psycopg2/_psycopg.so: undefined symbol: ASN1_STRING_length
END RequestId: efa28639-4100-11e6-a067-15a65cffa43f
REPORT RequestId: efa28639-4100-11e6-a067-15a65cffa43f Duration: 0.28 ms Billed Duration: 100 ms Memory Size: 128 MB


作業過程

このエラーが発生するまで、環境等を変更しながら幾つかの作業を行いました。
(主にpsycopg2周り)
その過程について、下記記載させていただきます。

1. macで圧縮ファイルを作成の上、lambdaにアップロードしたところ、psycopg2のエラー

下記のリンクを参考に圧縮ファイルを作成しましたが、動作しませんでした。

参考:AWS LambdaでPythonをSchedule実行させる

2. libpqを静的リンクさせる必要があるようなので、lambda実行環境と同じAMIでEC2を起動。

EC2上でpsycopg2をインストールした上で、圧縮ファイルを作成しようと考えました。

参考:AWS Lambda Pythonからpsycopg2でRDS PostgreSQLに接続する

3. 圧縮ファイルを作成の上、再度lambdaにアップロードしたところ、エラー。

FATAL: no pg_hba.conf entry for host "", user "", database "", SSL off : OperationalError Traceback (most recent call last): File "/var/task/lambda_function.py", line 22, in main connector = psycopg2.connect(host=".compute-1.amazonaws.com",port=5432,dbname="****",user="****",password="****") File "/var/task/psycopg2/init.py", line 164, in connect conn = _connect(dsn, connection_factory=connection_factory, async=async) OperationalError: FATAL: no pg_hba.conf entry for host "", user "", database "***", SSL off

どうやら、postgresqlの接続時にsslmode='require'のオプションを記載する必要があるようなので記載。

connector = psycopg2.connect(host="***.compute-1.amazonaws.com",
            port=5432,dbname="***",user="***",password="***",
            sslmode='require')`

参考:How to connect to a remote PostgreSQL database with Python

4. sslmode=requireを記載したところ、再度エラー。

OperationalError: sslmode value "require" invalid when SSL support is not compiled in

参考:Psycopg2 Python SSL Support is not compiled in

5. EC2のインスタンスを再作成し、postgresqlのインストール時に--with-opensslをつけた上で、再度実施。

--with-opensslを実施するには、openssl-develをインストールする必要があるようなので合わせて実施。
$ sudo yum -y install openssl-devel
$ ./configure --prefix $PG_DIR --without-readline --without-zlib --with-openssl

再度参考:AWS Lambda Pythonからpsycopg2でRDS PostgreSQLに接続する

6. 再度圧縮ファイルを作成の上、lambda上で実施したところ、上記のエラーが発生しました。


EC2の環境について

python:2.7.10
postgresql: 9.5.3 (psql --versionでは表示されず。)
psycopg:2-2.6.1
openssl:OpenSSL 1.0.1k-fips 8 Jan 2015


何かお気付きのところがございましたら、ご教授頂けますと幸いです。
よろしくお願いします。