AWS S3 — популярный инструмент для хранения данных в облаке, но работа с ним через консоль может быть неудобной. Автоматизация с помощью Boto3 упрощает задачи, повышая эффективность и контроль. В этой статье рассмотрим четыре практических скрипта на Python, которые помогут DevOps-инженерам добиться лучших результатов при работе с S3.
Скрипт 1: Список всех бакетов S3 с датами создания
Этот простой скрипт позволит вам получить информацию о всех ваших бакетах в S3. Он полезен для проведения аудитов и отслеживания инвентаризаций.
import boto3
s3 = boto3.client('s3')
response = s3.list_buckets()
print("S3 Buckets:n")
for bucket in response['Buckets']:
print(f"Name: {bucket['Name']} | Created On: {bucket['CreationDate']}")
Скрипт 2: Загрузка файла в S3 с обработкой ошибок
Загрузка файлов — частая задача, и правильная обработка ошибок делает ваш скрипт более надежным для продакшена.
import boto3
from botocore.exceptions import FileNotFoundError, NoCredentialsError, ClientError
s3 = boto3.client('s3')
file_name = "test.txt"
bucket_name = "your-bucket-name"
object_name = "uploads/test.txt"
try:
s3.upload_file(file_name, bucket_name, object_name)
print("File uploaded successfully.")
except FileNotFoundError:
print("The file was not found.")
except NoCredentialsError:
print("Credentials not available.")
except ClientError as e:
print(f"AWS Error: {e}")
Скрипт 3: Загрузка файлов из S3 с отслеживанием прогресса
Для крупных файлов важно видеть процесс загрузки. Этот скрипт отслеживает прогресс передачи данных.
import boto3
s3 = boto3.client('s3')
bucket_name = "your-bucket-name"
object_name = "large-file.zip"
file_name = "downloaded.zip"
def progress_callback(bytes_transferred):
print(f"Transferred: {bytes_transferred} bytes")
s3.download_file(bucket_name, object_name, file_name, Callback=progress_callback)
print("Download complete.")
Скрипт 4: Программное создание и удаление бакетов S3
Автоматизация управления жизненным циклом бакетов полезна для тестирования и динамических сред. Однако перед удалением необходимо убедиться, что бакет пуст.
import boto3
from botocore.exceptions import ClientError
s3 = boto3.client('s3')
bucket_name = "my-unique-bucket-name-12345"
# Создание бакета
try:
s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint': 'eu-west-1'})
print("Bucket created successfully.")
except ClientError as e:
print(f"Error creating bucket: {e}")
# Удаление бакета
ttry:
s3.delete_bucket(Bucket=bucket_name)
print("Bucket deleted successfully.")
except ClientError as e:
print(f"Error deleting bucket: {e}")
Практическое значение для разработчиков
Эти скрипты охватывают наиболее распространенные операции с S3: видимость (листинг бакетов), перемещение данных (загрузка/скачивание) и управление ресурсами (создание/удаление). Они просты, но значительно повышают автоматизацию работы с AWS. Для повышения эффективности можно добавить механизмы логирования и обработки ошибок, позволяя более эффективно работать в реальных условиях.
Следующим шагом в развитии автоматизации для S3 станет внедрение более сложных алгоритмов, таких как параллельные загрузки и дополнительные проверки целостности данных.