Amazon S3 (Simple Storage Service) — сервис объектного хранилища, запущенный AWS в 2006 году. Хранит неограниченное количество объектов (файлов) любого размера в «бакетах» (buckets). Доступ через HTTP/HTTPS REST API: PUT для загрузки, GET для скачивания, DELETE для удаления. S3-API стал стандартом отрасли — его реализуют десятки совместимых сервисов.
Как работает
Объект в S3 = ключ (путь) + данные + метаданные. Ключ — произвольная строка: photos/2024/01/image.jpg. Нет реальных директорий — только ключи с «/» в имени, которые интерфейс отображает как папки. Максимальный размер объекта: 5 ТБ (через Multipart Upload).
Бакет (bucket) — пространство имён для объектов в конкретном регионе. Имя бакета глобально уникально в S3. Политики доступа: IAM (для пользователей AWS), Bucket Policy (для бакета целиком), ACL (устаревший механизм). Public access может быть запрещён на уровне аккаунта — защита от случайного открытия данных.
Presigned URLs позволяют дать временный доступ к приватному объекту без раскрытия credentials: URL действителен 15 минут до 7 дней. Используется для ссылок на скачивание из защищённых бакетов.
S3-совместимые хранилища: Яндекс Object Storage, Selectel Object Storage, Timeweb S3, MinIO (self-hosted). API совместим на уровне основных операций, но Advanced S3 features (Intelligent Tiering, S3 Glacier) — только в AWS.
История
Amazon S3 запущен 14 марта 2006 года — один из первых сервисов AWS. В 2007 году добавлена поддержка BitTorrent-загрузки (убрана в 2019). В 2008 году S3 хранил 14 млрд объектов. В 2021 году Энди Джасси (Andy Jassy) раскрыл цифру: более 100 трлн объектов. S3 послужил основой для формирования объектного хранилища как категории и стандарта API.
S3-совместимые хранилища: self-hosted
MinIO — наиболее популярный self-hosted S3-совместимый сервер. Написан на Go, высокая производительность. Развёртывание через Docker за 5 минут: docker run -p 9000:9000 minio/minio server /data. Поддерживает все S3-операции: PUT, GET, DELETE, multipart upload, pre-signed URLs, bucket policies.
Стоимость объектного хранилища в облаке: AWS S3 — $0.023/ГБ/мес + $0.09/ГБ исходящего, Backblaze B2 — $0.006/ГБ/мес + $0.01/ГБ исходящего, Yandex Object Storage — $0.019/ГБ/мес. Для экономии: хранить на Backblaze B2, раздавать через Cloudflare (бесплатный исходящий трафик с Backblaze при использовании Cloudflare). Жизненный цикл объектов (Lifecycle Policy): автоматическое перемещение в Glacier/deep archive после N дней.
На что обращать внимание
S3 не является файловой системой: нет атомарных переименований директорий, нет прав на уровне директорий, latency выше чем у локального диска (~50–200 мс). Для статики сайтов, бэкапов, хранения медиафайлов — идеально. Для баз данных и приложений, требующих POSIX-файловой системы, — нет. Стоимость: данные стоят ~$0,023/ГБ/мес. (S3 Standard), но за исходящий трафик (egress) также взимается плата (~$0,09/ГБ) — это «ловушка» AWS.
S3-совместимые хранилища
S3 API стал стандартом де-факто для объектных хранилищ. VPS-провайдеры предлагают S3-совместимое хранилище: Selectel, Яндекс Object Storage, Mail.ru Cloud Storage. Self-hosted S3: MinIO (Docker-образ, одна команда для запуска), Ceph (enterprise-решение для петабайт). nginx может выступать прокси перед S3-бакетом для добавления кэширования и авторизации. Типичные применения S3: хранение бэкапов (off-site backup), статические ассеты через CDN, хранение медиафайлов WordPress через плагин WP Offload Media, дампы PostgreSQL-баз данных. Стоимость: AWS S3 ~$0.023/ГБ/мес, что значительно дешевле блочного хранилища VPS (~$0.1/ГБ/мес).