การเข้าถึงออบเจกต์ส่วนตัวใน 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

Pre-signed URLs

  • หมดอายุหลังจากช่วงเวลาที่กำหนด
  • เหมาะสำหรับการเข้าถึงชั่วคราว

ตัวอย่าง

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Python เบื้องต้นสำหรับ AWS Boto

Pre-signed URLs

อัปโหลดไฟล์

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Python เบื้องต้นสำหรับ AWS Boto

Pre-signed URLs

สร้าง Presigned 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 เดียว

# Create list to hold our DataFrames
df_list = []

# Request the list of csv's from S3 with prefix; Get contents response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# Get response contents request_files = response['Contents']
Python เบื้องต้นสำหรับ AWS Boto

โหลดหลายไฟล์รวมเป็น DataFrame เดียว

# Iterate over each object
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Read it as DataFrame obj_df = pd.read_csv(obj['Body'])
# Append DataFrame to list df_list.append(obj_df)
Python เบื้องต้นสำหรับ AWS Boto

โหลดหลายไฟล์รวมเป็น DataFrame เดียว

# Concatenate all the DataFrames in the list
df = pd.concat(df_list)

# Preview the DataFrame df.head()

ตัวอย่าง DataFrame

Python เบื้องต้นสำหรับ AWS Boto

ทบทวนการเข้าถึงออบเจกต์ส่วนตัวใน S3

ดาวน์โหลดแล้วเปิด

s3.download_file()

เปิดโดยตรง

s3.get_object()

สร้าง presigned URL

s3.generate_presigned_url()
Python เบื้องต้นสำหรับ AWS Boto

ทบทวน - การแชร์ URL

ไฟล์สาธารณะ: Public Object URL

สร้างด้วย .format()

'https://{bucket}.{key}'
ไฟล์ส่วนตัว: Presigned URL

สร้างด้วย .get_presigned_url()

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Python เบื้องต้นสำหรับ AWS Boto

มาฝึกกันเถอะ!

Python เบื้องต้นสำหรับ AWS Boto

Preparing Video For Download...