1
0

More than 1 year has passed since last update.

Gluejob pythonScriptでmongo Atlasからデータ取得をしてみた

Last updated at Posted at 2021-10-24

本記事について

この記事では, AWS GlueJobでmongoDBに接続してデータを取得し, s3に保存する処理をまとめて
記述していきたいと思います.

前提条件

本来glueでmongo Atlasを接続する際, その旨を設定する必要がありますが
本記事ではできていることを前提とします.(後日詳しく記入)

アーキテクチャ図

スクリーンショット 2021-10-24 14.27.12.png

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つ

glue jobの設定

独自のライブラリを使用する際には, 以下の部分で設定する.
スクリーンショット 2021-10-24 15.20.47.png
のここの部分↓
スクリーンショット 2021-10-24 15.19.11.png
に以下のように設定する.

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を使ってデータを取得することができる.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0