Points & Lines

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

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']
)

Follow me!

モバイルバージョンを終了