访问 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 入门

将多个文件加载为一个 DataFrame

# 创建列表保存各个 DataFrame
df_list = []

# 从 S3 获取带前缀的 csv 列表;取内容 response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# 获取返回内容 request_files = response['Contents']
Python 中的 AWS Boto 入门

将多个文件加载为一个 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 入门

将多个文件加载为一个 DataFrame

# 合并列表中的所有 DataFrame
df = pd.concat(df_list)

# 预览 DataFrame 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 入门

¡Vamos a practicar!

Python 中的 AWS Boto 入门

Preparing Video For Download...