AWS

QuickSightを試してみる③【AWS S3へデータ自動アップ】

AWS

前回はQuickSightに必要なS3バケットの準備とサンプルデータ作成のスクリプトの準備まで行いました。
https://syachiku.net/amazon-quicksight02/

今回は少しQuickSightとは脱線しますが、サンプルデータをS3へ自動的にアップロードするスクリプトを作成します。
手動でアップしても良いのですが、やはりリアルタイムでのデータ確認をできたほうがよいですよね。

1. AWS S3へアップするための準備

前提として、PythonでS3へデータをアップロードするため、AWS CLIとboto3が必要です。

AWS CKIのインストールは以下を参照ください。
https://syachiku.net/windows10-awscli-v2-install/

また、boto3についてもインストールしておいてください。

> pip install boto3

2. S3にアップロードするスクリプトを作成

では以下の仕様でスクリプトを作成します。

  • 前回の1秒に1回作成されたデータをS3バケット(quicksight-gogolon-test)へアップする
  • アップ先のフォルダ構造は「/quicksight-data/year=xxxx/month=xxxx/day=xxx/ファイル名」とする。
  • 書き込み途中のファイルをアップロードを防止するため、更新日が1分以内のファイルはスキップする
  • AWSへアップしたらファイルは削除する

という事で以下Pythonスクリプトです。

import boto3
import os
import time

DIR_PATH = os.path.dirname(os.path.abspath(__file__)) + "/datas/"
DIR_PATH_DONE = os.path.dirname(os.path.abspath(__file__)) + "/done/"

UPLOAD_BUCKET = 'quicksight-gogolon-test'
UPLOAD_BUCKET_FOLDER = 'quicksight-data/'

files = os.listdir(DIR_PATH)

s3 = boto3.resource('s3')
bucket = s3.Bucket(UPLOAD_BUCKET)

for file in files:
    time_stamp = os.path.getmtime(DIR_PATH + file)
    diff_time = time.time() - time_stamp

    basename = os.path.basename(file)
    year = basename[0:4]
    month = basename[4:6]
    day = basename[6:8]


    if diff_time > 60:
        print("Upload:"+file)
        print("Upload:"+UPLOAD_BUCKET_FOLDER)

        bucket.upload_file(DIR_PATH + file,
                           UPLOAD_BUCKET_FOLDER + "year=" + year + "/month=" + month + "/day=" + day + "/" + file)
        os.remove(DIR_PATH + file)

実際に実行してみると以下の様にAWS S3にファイルがアップされることが確認できました。

このスクリプトをcronやタスクスケジューラで定期的に実行すれば自動的にデータがアップされていきます。

次回はようやく本題になるAthenaでの対応を行います。

今回は以上となります。

コメント

タイトルとURLをコピーしました