Сохранение данных в объект S3 с помощью метода boto3
Быстрый ответ
Для сохранения данных в S3 используя boto3
, в первую очередь, убедитесь, что учетные данные AWS настроены правильно:
import boto3
s3 = boto3.client('s3')
s3.put_object(Bucket='my-bucket', Key='example.txt', Body='Hello, World!')
Этот код сохранит строку 'Hello, World!' в файл 'example.txt'. Чтобы сохранить файл, замените Body='Hello, World!'
на Body=open('file.txt', 'rb')
.
Простая загрузка файла
Для эффективной загрузки больших файлов воспользуйтесь методом upload_file()
:
import boto3
s3 = boto3.resource('s3')
s3.Bucket('my-bucket').upload_file('path/to/local/file.txt', 'file.txt')
Убедитесь, что пути к файлам указаны правильно!
Работа с JSON
Чтобы преобразовать объекты Python в JSON, используйте json.dumps()
:
import json
import boto3
s3 = boto3.resource('s3')
data = {'hello': 'world'}
s3.Object('my-bucket', 'data.json').put(Body=json.dumps(data))
А для возврата данных из JSON в Python объект:
json_content = s3.Object('my-bucket', 'data.json').get()['Body'].read().decode('utf-8')
data = json.loads(json_content)
Безопасность учетных данных
Для обеспечения безопасности данных не встраивайте учетные данные AWS напрямую в код. Храните их в файле .aws/credentials
или в переменных окружения.
Визуализация
Передача данных в S3 с помощью boto3
похожа на отправку письма:
Выполняем отправку данных в S3:
1. Подготавливаем 'письмо' (data)
2. Указываем адресату (bucket)
3. Отправляем письмо с помощью вызова метода (`s3.put_object`)
import boto3
data = 'Hello, S3!'
bucket = "s3_bucket_for_letters"
object_key = "a_letter_for_s3.txt"
s3 = boto3.client('s3')
s3.put_object(Bucket=bucket, Key=object_key, Body=data)
И вот ваши данные были успешно отправлены в S3!
Хранение бинарных данных
Для сохранения бинарных данных, например, изображений или видео, открывайте файлы в режиме 'rb':
s3.put_object(Bucket='my-bucket', Key='image.jpg', Body=open('path/to/me_smiling_with_bucket.jpg', 'rb'))
Использование lambda-функции для работы с JSON
Для упрощения работы с данными в формате JSON возможно использовать lambda-функции:
json_dump_s3 = lambda obj, bucket, key: s3.Object(bucket, key).put(Body=json.dumps(obj))
json_load_s3 = lambda bucket, key: json.loads(s3.Object(bucket, key).get()['Body'].read().decode('utf-8'))
json_dump_s3({'hello': 'world'}, 'my-bucket', 'data.json')
data = json_load_s3('my-bucket', 'data.json')
Обработка ошибок
Используйте обработку исключений для готовности к непредвиденным ситуациям:
from botocore.exceptions import NoCredentialsError, PartialUploadError
try:
s3.upload_file('file.txt', 'my-bucket', 'file.txt')
except NoCredentialsError:
print('Учетные данные недоступны, пожалуйста, проверьте их и попробуйте заново')
except PartialUploadError:
print('Неполная загрузка: возможно, есть проблема с размером файла или сетевым подключением')