+7 (495) 107-75-45 Подключение
+7 (495) 107-75-47 Тех. поддержка 24/7
Пример
08.11.2024

Облачное хранилище данных с помощью Amazon S3 и Python

Введение

Amazon S3 — это облачное хранилище, предназначенное для хранения и управления данными с доступом через интернет. С его помощью можно загружать, хранить и обрабатывать большие объемы данных. Python предоставляет удобный интерфейс для работы с S3 через библиотеку boto3. В этой статье мы рассмотрим основные команды и функции для работы с S3 с помощью Python, включая создание бакетов, загрузку и загрузку файлов, управление правами доступа.

Подключение к amazon

1. Подготовка: регистрация в AWS и настройка AWS CLI

Чтобы использовать S3, необходимо создать учетную запись в AWS и выполнить базовую настройку.

  1. Регистрация в AWS
    Перейдите на сайт AWS (_https://aws.amazon.com/)  и создайте учетную запись. Новым пользователям предоставляется бесплатный уровень, включающий ограниченное хранилище S3 на 12 месяцев.
  2. Настройка учетных данных
    После регистрации зайдите в AWS Management Console и откройте сервис IAM (управление доступом и идентификацией). Создайте нового пользователя с правами для работы с S3, добавив к нему политику AmazonS3FullAccess. Запишите Access Key ID и Secret Access Key — они понадобятся для настройки CLI и boto3.
  3. Установка и настройка AWS CLI
    Установите AWS CLI, чтобы легко управлять конфигурацией доступа к AWS.
pip install awscli
aws configure
  1. При выполнении aws configure система запросит у вас Access Key ID, Secret Access Key, регион и формат вывода. Эти данные сохранятся локально, и boto3 сможет использовать их для доступа к S3.

2. Установка и настройка библиотеки boto3

boto3 — это официальная библиотека AWS для Python, которая позволяет программно управлять сервисами AWS, включая S3.

pip install boto3

Затем импортируем библиотеку в Python:

import boto3

Работа с cli

3. Создание бакета S3 с помощью boto3

Создадим бакет, который будет контейнером для хранения файлов. Бакет — это базовая единица хранения в S3.

s3 = boto3.client('s3')

bucket_name = 'my-unique-bucket-name-12345'
region = 'us-west-2'

# Создание бакета
s3.create_bucket(
    Bucket=bucket_name,
    CreateBucketConfiguration={'LocationConstraint': region}
)
print(f"Bucket '{bucket_name}' created successfully.")

4. Загрузка файлов в S3

Для загрузки файлов в S3 используем метод upload_file:

file_name = 'path/to/local/file.txt'
object_name = 'folder_in_s3/file.txt'

s3.upload_file(file_name, bucket_name, object_name)
print(f"File '{file_name}' uploaded to '{bucket_name}/{object_name}'.")

Эти команды позволят автоматически загружать файлы в облако, сохраняя при этом локальную структуру.

5. Скачивание файлов из S3

Для скачивания файла из S3 используем метод download_file:

s3.download_file(bucket_name, object_name, 'path/to/save/file.txt')
print(f"File '{object_name}' downloaded from '{bucket_name}'.")

Этот метод можно использовать для резервного копирования данных или передачи файлов между разными системами.

6. Управление файлами и бакетами в S3

  • Просмотр списка файлов в бакете
    Получить список всех файлов в бакете можно с помощью метода list_objects_v2:
response = s3.list_objects_v2(Bucket=bucket_name)
for item in response.get('Contents', []):
    print(item['Key'])

Удаление файла из бакета
Чтобы удалить файл из бакета, используйте метод delete_object:

s3.delete_object(Bucket=bucket_name, Key=object_name)
print(f"File '{object_name}' deleted from '{bucket_name}'.")

Удаление бакета
Удалить сам бакет можно после того, как все файлы будут удалены. Используйте delete_bucket:

s3.delete_bucket(Bucket=bucket_name)
print(f"Bucket '{bucket_name}' deleted.")

7. Управление правами доступа к файлам

Amazon S3 позволяет задавать права доступа на уровне объекта и бакета. Например, вы можете сделать файл общедоступным или ограничить доступ только для определённых пользователей.

  • Открытие доступа к файлу для всех
    Сделаем файл общедоступным сразу после загрузки:
s3.put_object_acl(Bucket=bucket_name, Key=object_name, ACL='public-read')

Настройка aws python Boto3

Проверка прав доступа
Чтобы проверить права доступа к файлу, используйте метод get_object_acl:

acl = s3.get_object_acl(Bucket=bucket_name, Key=object_name)
print("Access control list:", acl)

8. Генерация временной ссылки для доступа к файлу

В некоторых случаях необходимо предоставить доступ к файлу на ограниченное время. В S3 можно создать временную ссылку, которая позволит скачивать файл, например, в течение 1 часа.

url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': bucket_name, 'Key': object_name},
    ExpiresIn=3600
)
print("Temporary URL:", url)

Эта ссылка может быть отправлена пользователю, который получит доступ к файлу без прямых прав доступа.

9. Автоматизация с помощью S3 Event Notifications

Amazon S3 поддерживает систему уведомлений о событиях, таких как загрузка нового файла или удаление объекта. Эти уведомления можно использовать для запуска AWS Lambda функций или других автоматизаций. Пример настройки:

  1. В AWS Console зайдите в настройки бакета, выберите Event notifications.
  2. Установите уведомления для события PUT и выберите способ доставки, например, в очередь SQS или функцию Lambda.

10. Пример автоматизации резервного копирования с использованием Python

Сценарий резервного копирования для регулярной загрузки файлов в S3:

import os
import boto3
from datetime import datetime

s3 = boto3.client('s3')
bucket_name = 'my-backup-bucket'
backup_folder = '/path/to/backup/folder'

for root, dirs, files in os.walk(backup_folder):
    for file in files:
        local_path = os.path.join(root, file)
        s3_path = f"{datetime.now().strftime('%Y-%m-%d')}/{file}"
        
        s3.upload_file(local_path, bucket_name, s3_path)
        print(f"File '{file}' uploaded to S3 as '{s3_path}'.")

Этот скрипт загружает все файлы из локальной папки в S3, создавая для каждого дня отдельную папку.

Заключение

Использование S3 с boto3 в Python позволяет создавать мощные и гибкие решения для хранения данных. Будь то резервное копирование, передача файлов или управление правами доступа, S3 предоставляет необходимые инструменты для работы с облачным хранилищем.