前回は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 boto32. 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での対応を行います。
今回は以上となります。
        
        
        
        
        
        
        
        
        
        
        
        
        
        
  
  
  
  

コメント