本記事について
この記事では, AWS GlueJobでmongoDBに接続してデータを取得し, s3に保存する処理をまとめて
記述していきたいと思います.
前提条件
本来glueでmongo Atlasを接続する際, その旨を設定する必要がありますが
本記事ではできていることを前提とします.(後日詳しく記入)
アーキテクチャ図
gluejobで作成したコード
glue_sample.py
import pandas
import pymongo
import boto3
from pymongo import MongoClient
'''s3に送るプログラム'''
def upload_data(dist_bucket, s3_file_path, file_name):
S3_RESOURCE = boto3.resource('s3')
s3_source_bucket = S3_RESOURCE.Bucket(dist_bucket)
s3_source_bucket.upload_file(file_name, s3_file_path)
''' query取得部分'''
def mongo_query():
client = pymongo.MongoClient("mongodb+srv://{User}:{Password}@{接続host}?retryWrites=true&w=majority")
#mongoDB nameの指定
db = client.{{db}}
#mongoDB Collectionの指定
path_collection = db.{{collection}}
#mongoDB データ取得
collection_data = path_collection.find({query})
#データフレームにする
df = pandas.DataFrame(collection_data)
#csvで返す
return df.to_csv('{{file_name}}.csv')
'''関数の実行'''
mongo_query()
today = datetime.date.today()
SOURCE_BUCKET = 's3_bucket'
s3_file_path = '{{file_name}}.csv'
upload_data(SOURCE_BUCKET,s3_file_path, str(today)+'{{s3_output_filename}}.csv')
注意点
pythonでmongoDBと接続する際にはpymongoが必要
mongodb+srv://を使用する為には, PyMongo'[srv]'が必要
通常python Scriptで実行するときには下記のライブラリをインストールする.
pip
python -m pip install pymongo[srv]
をインストールする.
glueではpip installできない為, 自分でwhlファイルを用意する.
用意するのは下記2つ
- pymongo
https://pypi.org/project/dnspython/ - dnspython
https://pypi.org/project/dnspython/
glue jobの設定
独自のライブラリを使用する際には, 以下の部分で設定する.
のここの部分↓
に以下のように設定する.
pythonライブラリパスの設定例
s3://{{s3_bucket}}/dnspython-2.1.0-py3-none-any.whl,s3://{{s3_bucket}}/pymongo-3.12.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
終わりに
上記のように設定することによって, mongo Atlasから, glue job python Scriptを使ってデータを取得することができる.