AWS GlueJob(Pythoh shell)でMySQL(RDS | Aurora MySQL compatible)に接続する

なぜだかは不明だが(pythonの事がわかってないからなのか)GlueのPython実行(PythonShel)にはMySQLへの接続ライブラリが無い。

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-python.html

しょうがないので外部ライブラリとして作って自分のバケットにおいて読み込ませる事にした。

aws.amazon.com

ドキュメント漁ってもいまいち一気通貫に行かなかったので、 実際やったことを記録しておく。

ライブラリをローカルに取得してeggファイルを作る

git clone https://github.com/PyMySQL/PyMySQL.git 
cd PyMySQL/
python setup.py bdist_egg

これでdistディレクトリ配下にeggファイルが作成されるので。 この

PyMySQL-0.9.3-py3.6.egg

ファイルをGlueが読み込めるS3のバケットに配置してやる。

注意点

eggファイルを作る時のpythonバージョンとGlue上のPythonバージョンを揃える事。 このファイルを作った時は

Python 3.6.9

揃ってないとjob実行時にエラーになります。

S3の設定

Jobからread可能なS3の適当な場所にアップロードする

Glue側の設定

GlueのJob設定の

Python library path

という所にS3のフルパスを記入してやる。

s3://バケット/PyMySQL-0.9.3-py3.6.egg

みたいな感じ。 これで後は

import pymysql.cursors

みたいな感じでjobから読み出せる。

次はDataframe使っていい感じにETLする。