AWS Glue python shell で ETLジョブ作成する際のハマりどころメモ
2021/1 時点
Glue Python shellとは?
- GlueのジョブTypeの1つ
- Sparkを使うまでもない軽いジョブや各種連携に使える
- 例
- DBにSQLを投げる
- FTPサーバからファイルGET
- 外部サービスをAPIでキック
- などなど
- 例
- Python(version2 or 3)で処理を書ける
- ジョブ実行環境はジョブ毎にサーバレスリソースが割り当てられる(Lambdaのような感じ)
- 1DPU または 1/16DPU から選べる
- 1DPUは、4vCPUのコンピューティングと16GBのメモリに相当
- Lambdaのように時間制約(15分)はない
気になったポイント
[1] VPC内での実行とリソース接続
- Glueの「接続」機能で接続先リソースやNWを設定しておき、ジョブの設定で紐付けると、該当のセグメント(SG)を起点としてジョブが実行される
[2] 利用できるライブラリ
- 標準サポートされているライブラリは以下
- https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-python.html
- DB接続には
PyGreSQL
を利用できる
- これ以外のライブラリまたは独自のライブラリを追加することもできる
- ライブラリを追加するには、
python setuptools
を使って、WhleelファイルまたはEggファイルを自分で作成して、S3にアップロードし、ジョブでそのパスを指定する - 注意点としては、ジョブ実行の際にPyPIに接続してinstallされる動きとなるようで、ジョブ実行場所はNATなどで外部接続が許可されてる必要あり
- ライブラリを追加するには、
[3] 外部FTPサーバからのGET処理はできる?
- 以下でSFTPサーバからGETしてS3にPutするサンプルが紹介されてる
- 参考:https://github.com/ShafiqaIqbal/SFTP-S3-Glue-Ingestion-Python/blob/master/Glue_Python_FTP_S3_Ingestion.py
- SFTP接続のライブラリ
paramiko
を利用する。(標準サポートされてないのでWhlなどで要追加)
- ただし外部リソースからのGET処理はGlue Studio Connectorという選択肢もある