Доступ до приватних об'єктів у S3

Вступ до AWS Boto в Python

Maksim Pecherskiy

Data Engineer

Завантаження приватного файла

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

Перегляд

Вступ до AWS Boto в Python

Завантаження приватних файлів

Завантажити файл

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

Зчитати з диска

pd.read_csv('./potholes_local.csv')
Вступ до AWS Boto в Python

Доступ до приватних файлів

Використайте '.get_object()'

obj = s3.get_object(Bucket='gid-requests', Key='2019/potholes.csv')
print(obj)
Вступ до AWS Boto в Python

Доступ до приватних файлів

Доступ до приватних файлів

Вступ до AWS Boto в Python

Доступ до приватних файлів

Отримати об'єкт

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

Зчитати StreamingBody у Pandas

pd.read_csv(obj['Body'])
Вступ до AWS Boto в Python

Попередньо підписані URL-адреси

  • Мають строк дії
  • Зручні для тимчасового доступу

Приклад

https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801
Вступ до AWS Boto в Python

Попередньо підписані URL-адреси

Надіслати файл

s3.upload_file(
  Filename='./potholes.csv', 
  Key='potholes.csv', 
  Bucket='gid-requests')
Вступ до AWS Boto в Python

Попередньо підписані URL-адреси

Згенерувати 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)
Вступ до AWS Boto в Python

Завантажити кілька файлів в один DataFrame

# Створіть список для зберігання наших DataFrame
df_list = []

# Запитайте у S3 список csv з префіксом; отримайте вміст response = s3.list_objects( Bucket='gid-requests', Prefix='2019/')
# Отримайте вміст відповіді request_files = response['Contents']
Вступ до AWS Boto в Python

Завантажити кілька файлів в один DataFrame

# Ітеруйтеся по кожному об'єкту
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Прочитайте як DataFrame obj_df = pd.read_csv(obj['Body'])
# Додайте DataFrame до списку df_list.append(obj_df)
Вступ до AWS Boto в Python

Завантажити кілька файлів в один DataFrame

# Об'єднайте всі DataFrame у списку
df = pd.concat(df_list)

# Перегляньте DataFrame df.head()

Перегляд DataFrame

Вступ до AWS Boto в Python

Підсумок: доступ до приватних об'єктів у S3

Спочатку завантажити, потім відкрити

s3.download_file()

Відкрити напряму

s3.get_object()

Згенерувати presigned URL

s3.generate_presigned_url()
Вступ до AWS Boto в Python

Підсумок — спільний доступ за URL

Публічні файли: Public Object URL

Згенеруйте за допомогою .format()

'https://{bucket}.{key}'
Приватні файли: Presigned URL

Згенеруйте за допомогою .get_presigned_url()

'https://?AWSAccessKeyId=12345&Signature=rBmnrwutb6VkJ9hE8Uub%2BBYA9mY%3D&Expires=1557624801'
Вступ до AWS Boto в Python

Давайте потренуємось!

Вступ до AWS Boto в Python

Preparing Video For Download...