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