S3 の非公開オブジェクトへアクセス

Python で始める AWS Boto 入門

Maksim Pecherskiy

Data Engineer

非公開ファイルのダウンロード

df = pd.read_csv('https://gid-staging.potholes.csv')

プレビュー

Python で始める AWS Boto 入門

非公開ファイルをダウンロード

ファイルをダウンロード

s3.download_file(
  Filename='potholes_local.csv',
  Bucket='gid-staging', 
  Key='2019/potholes_private.csv')

ディスクから読む

pd.read_csv('./potholes_local.csv')
Python で始める AWS Boto 入門

非公開ファイルへアクセス

'.get_object()' を使用

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Python で始める AWS Boto 入門

非公開ファイルへアクセス

非公開ファイルへアクセス

Python で始める AWS Boto 入門

非公開ファイルへアクセス

オブジェクトを取得

obj = s3.get_object(
  Bucket='gid-requests', 
  Key='2019/potholes.csv')

StreamingBody を Pandas に読み込む

pd.read_csv(obj['Body'])
Python で始める AWS Boto 入門

事前署名付きURL

  • 一定時間で期限切れ
  • 一時的な共有に最適

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Python で始める AWS Boto 入門

事前署名付きURL

ファイルをアップロード

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Python で始める AWS Boto 入門

事前署名付きURL

事前署名URLを生成

share_url = s3.generate_presigned_url(
  ClientMethod='get_object',
  ExpiresIn=3600,
  Params={'Bucket': 'gid-requests','Key': 'potholes.csv'}
)

Pandasで開く

pd.read_csv(share_url)
Python で始める AWS Boto 入門

複数ファイルを1つのDataFrameへ読み込み

# DataFrame を格納するリストを作成
df_list = []

# 指定プレフィックスの CSV 一覧を取得 response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# レスポンスの内容を取得 request_files = response['Contents']
Python で始める AWS Boto 入門

複数ファイルを1つのDataFrameへ読み込み

# 各オブジェクトを反復
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# DataFrame として読み込む obj_df = pd.read_csv(obj['Body'])
# リストに追加 df_list.append(obj_df)
Python で始める AWS Boto 入門

複数ファイルを1つのDataFrameへ読み込み

# リスト内の DataFrame を連結
df = pd.concat(df_list)

# 先頭を確認 df.head()

DataFrame をプレビュー

Python で始める AWS Boto 入門

復習: S3 の非公開オブジェクトへのアクセス

ダウンロードして開く

s3.download_file()

直接開く

s3.get_object()

事前署名URLを生成

s3.generate_presigned_url()
Python で始める AWS Boto 入門

復習 - URL の共有

公開ファイル: 公開オブジェクトURL

.format() で生成

'https://{bucket}.{key}'
非公開ファイル: 事前署名URL

.get_presigned_url() で生成

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Python で始める AWS Boto 入門

練習しましょう!

Python で始める AWS Boto 入門

Preparing Video For Download...