ScrapyをAWS Lambdaで実行するまで ②MySQLdb(mysqlclient)エラーの解決

LambdaでMySQLdb(mysqlclient)エラー


前回までの記事
ScrapyをAWS Lambdaで実行するまで ①関数作成とデプロイ
ScrapyをAWS Lambdaで実行するまで ⓪ネットワーク構成と各設定

Scrapyプログラム中でMySQLライブラリの使用箇所でエラーが発生。
[ERROR] NameError: name ‘_mysql’ is not defined

プラグラム内でPythonのMySQL接続用ライブラリとして、MySQLdb(mysqlclient)を使用していたがLambdaではこちらの利用をサポートしていなかったようである。

インスタンスタイプがUbuntuのEC2上では問題なく実行出来ていたので、Amazon Linux環境では未サポートの可能性あり。(未検証)

PyMySQLを使用する

解決策として、MySQL接続用ライブラリをMySQLdbからPyMySQLというものへ差し替える。

開発環境でPyMySQLライブラリ(PyMySQL 1.0.2)をダウンロードし、別途LambdaレイヤーとしてLambda関数へ追加した。

pip install PyMySQL -t python/
zip -r pymysql.zip python/

プログラムの変更

ライブラリの使用方法はMySQLdbと同じで問題なし。

# import MySQLdb
import pymysql.cursors
# conn = MySQLdb.connect(
#     host=os.environ['MYSQL_HOST'],
#     db=os.environ['MYSQL_DATABASE'],
#     user=os.environ['MYSQL_USER'],
#     passwd=os.environ['MYSQL_PASSWORD'],
#     charset=os.environ['MYSQL_CHARSET']
# )
conn = pymysql.connect(
    host=os.environ['MYSQL_HOST'],
    db=os.environ['MYSQL_DATABASE'],
    user=os.environ['MYSQL_USER'],
    passwd=os.environ['MYSQL_PASSWORD'],
    charset=os.environ['MYSQL_CHARSET']
)

PyMySQLへの変更でエラーは解決。

Follow me!

ScrapyをAWS Lambdaで実行するまで ②MySQLdb(mysqlclient)エラーの解決” に対して1件のコメントがあります。

コメントは受け付けていません。