AWS 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に変更することで解決。
https://pypi.org/project/PyMySQL/
開発環境でPyMySQLライブラリ(PyMySQL 1.0.2)をダウンロードし、別途LambdaレイヤーとしてLambda関数へ追加した。
pip install PyMySQL -t python/
zip -r pymysql.zip python/
プログラムの変更
DB接続のためのプロパティの指定はMySQLdbと同様にすればいい。
import pymysql.cursors
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']
)