Amazon Simple Storage Service (S3) — хранилище файлов любого типа, любого объема, с высокой доступностью и отказоустойчивостью. Оно разработано для хранения статического контента, пользовательских данных и бэкапов.
Сервис подходит для небольших, молодых проектов с несколькими тысячами файлов и сравнительно небольшим трафиком, ведь стоимость будет максимально низкой (порядка нескольких долларов в месяц).
Но с ростом стоимость будет пропорционально увеличиваться, нужно платить не только за загрузку и раздачу файлов, но также за трафик, запросы GET и POST.
Преимущества и недостатки
Главный недостаток S3 — высокая стоимость при загрузке и отдаче терабайтов данных.
Но и преимущества очевидные:
- Надежность и безопасность — распределенные резервные копии данных (автоматически), поддержка SSL, шифрования, разрешения на доступ;
- Высокая доступность — несколько регионов для увеличения скорости загрузки, гарантия доступности данных ;
- Простота масштабирования — автоматическое увеличение объема по мере надобности;
- Выдерживает любую нагрузку — резкие пики популярности не повлияют на доступность файлов;
- Простота использования — веб-консоль, API, SDK и даже мобильное приложение.
Возможности
Весь цикл работы с сервисом ограничивается 5 действиями:
Все файлы (фото, видео, документы и т.д) хранятся в контейнерах (bucket). Самый простой способ создания новых bucket-ов — использовать веб-консоль Amazon S3. А так это реализуется средствами PHP:
$result = $client->createBucket([
'ACL' => 'private',
'Bucket' => 'test-bucket',
'CreateBucketConfiguration' => [
'LocationConstraint' => 'eu-central-1',
],
]);
# С указанием прав доступа, имени контейнера и региона
Также можно задействовать SDK для Ruby, Java и .NET (достаточно сложно и обширно), и curl в виде:
curl -v https://testbucket.s3.amazonaws.com/ \
-H "Authorization: AWS4-HMAC-SHA256 \
Credential=AKIAIOSFODNN7EXAMPLE/20160530/us-east-1/s3/aws4_request, \
SignedHeaders=host;x-amz-content-sha256;x-amz-date, \
Signature=182072eb53d85c36b2d791a1fa46a12d23454ec1e921b02075c23aee40166d5a" \
-H "x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
-H "x-amz-date: 20160530T124500Z"
# Создание нового контейнера с указанием учетных данных
Название контейнера может быть представлено в виде URL:
http://bucket.s3-aws-region.amazonaws.com
# Или
http://s3-aws-region.amazonaws.com/bucket
# Краткие названия регионов доступны в документации, по умолчанию US East (N. Virginia)
Утилиты командной строки
Для работы с S3 имеется достаточное количество 3rd party tools, один из лучших — консольный s3cmd для Ubuntu:
sudo aptitude install s3cmd
# Утилита доступна в системе aptitude
Прежде чем использовать s3cmd, нужно отредактировать конфигурационный файл ~/.s3cfg, добавив учетные данные S3. Затем утилита обеспечит упрощенное управление хранилищем:
s3cmd mb s3://newbucket # создать контейнер newbucket
s3cmd rb s3://newbucket # удалить пустой контейнер newbucket
s3cmd ls [s3://BUCKET[/PREFIX]] # список файлов или корзин
s3cmd la # список всех объектов во всех корзинах
s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX] # загрузить файл в корзину
s3cmd get s3://BUCKET/OBJECT LOCAL_FILE # скачать файл
s3cmd del s3://BUCKET/OBJECT # удалить файл
s3cmd sync LOCAL_DIR s3://BUCKET[/PREFIX] # синхронизировать каталог S3 с локальным каталогом
s3cmd sync s3://BUCKET[/PREFIX] LOCAL_DIR # синхронизировать каталог S3 с локальным каталогом
s3cmd du [s3://BUCKET[/PREFIX]] # показать объем файлов
s3cmd setacl s3://BUCKET[/OBJECT] # изменить параметры доступа к объекту
s3cmd info s3://BUCKET[/OBJECT] # свойства объекта
# Все команды находятся в справке s3cmd --help
Похожее решение предоставляет и сам Amazon. Но AWS CLI более универсально и работает со всеми облачными сервисами компании:
curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
# Скачивает пакет с корзины S3, распаковка и установка, требуется установленный Python
После установки также нужно настроить свой профиль:
$ /usr/local/bin/aws configure --profile test-bucket
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: aws-region
Default output format [None]: json
# Укажите свои учетные данные, если не указать профиль, то будет настроен основной
Утилита содержит большое количество опций и дополнительных функций.
Самое главное
Начните знакомство с Amazon S3 через веб-консоль — она даст наглядное представление вашего хранилища. В большинстве случаев ее будет достаточно для работы с сервисом. Для продвинутой работы с хранилищем доступны SDK и другие утилиты.