Списки рассылки S3tools/S3cmd:
Для S3cmd требуется Python 2.6 или новее. Python 3+ также поддерживается, начиная с S3cmd версии 2.
См. инструкции по установке.
S3cmd ( s3cmd
) — это бесплатный инструмент и клиент командной строки для загрузки, получения и управления данными в Amazon S3 и других поставщиках облачных хранилищ, использующих протокол S3, таких как Google Cloud Storage или DreamHost DreamObjects. Он лучше всего подходит для опытных пользователей, знакомых с программами командной строки. Он также идеально подходит для пакетных сценариев и автоматического резервного копирования на S3, запускаемого из cron и т. д.
S3cmd написан на Python. Это проект с открытым исходным кодом, доступный по лицензии GNU Public License v2 (GPLv2) и бесплатен как для коммерческого, так и для частного использования. Вам придется заплатить Amazon только за использование их хранилища.
В S3cmd было добавлено множество функций и опций с момента ее первого выпуска в 2008 году.... недавно мы насчитали более 60 опций командной строки, включая многочастную загрузку, шифрование, инкрементное резервное копирование, синхронизацию s3, управление ACL и метаданными, S3. размер корзины, политика корзины и многое другое!
Amazon S3 предоставляет управляемое хранилище с доступом через Интернет, где каждый может хранить любые объемы данных и позже снова получить их.
S3 — платный сервис Amazon. Прежде чем сохранять что-либо в S3, вы должны зарегистрировать учетную запись «AWS» (где AWS = Amazon Web Services), чтобы получить пару идентификаторов: ключ доступа и секретный ключ. Вам нужно будет передать эти ключи S3cmd. Думайте о них так, как будто это имя пользователя и пароль для вашей учетной записи S3.
На момент написания статьи стоимость использования S3 составляет (в долларах США):
0,023 доллара США за ГБ в месяц использованного дискового пространства.
плюс
0,00 доллара США за ГБ – все данные загружены
плюс
0,000 долларов США за ГБ — скачивание первых 1 ГБ данных в месяц 0,090 долларов США за ГБ — скачивание данных до 10 ТБ в месяц 0,085 долларов США за ГБ — скачивание следующих 40 ТБ данных в месяц 0,070 долларов США за ГБ — скачивание следующих 100 ТБ данных в месяц 0,050 долларов США за ГБ — скачивание данных в месяц свыше 150 ТБ
плюс
0,005 доллара США за 1000 запросов PUT, COPY или LIST 0,004 доллара США за 10 000 запросов GET и всех остальных запросов
Если, например, 1 января вы загрузите 2 ГБ фотографий в формате JPEG из отпуска в Новой Зеландии, в конце января с вас будет взиматься плата в размере 0,05 доллара США за использование 2 ГБ дискового пространства в течение месяца, 0,0 доллара США за загрузку 2 ГБ данных и несколько центов за запросы. Это составляет чуть более 0,06 доллара за полную резервную копию ваших драгоценных фотографий с отпуска.
В феврале его не трогаешь. Ваши данные по-прежнему находятся на серверах S3, поэтому вы платите 0,06 доллара за эти два гигабайта, но за передачу не будет взиматься ни копейки. Это составляет 0,05 доллара США в качестве постоянной стоимости резервного копирования. Не так уж и плохо.
В марте вы разрешаете анонимному доступу для чтения к некоторым вашим фотографиям, и ваши друзья скачивают, скажем, 1500 МБ из них. Поскольку файлы принадлежат вам, вы несете ответственность за понесенные расходы. Это означает, что в конце марта с вас будет взиматься плата в размере 0,05 доллара США за хранилище плюс 0,045 доллара США за трафик загрузок, генерируемый вашими друзьями.
Минимальный ежемесячный контракт или плата за установку не предусмотрены. Вы платите за то, что используете. Вначале мой счет составлял около 0,03 доллара США или даже ноль.
Это вкратце модель ценообразования Amazon S3. Посетите домашнюю страницу Amazon S3 для получения более подробной информации.
Стоит ли говорить, что все эти деньги взимает сам Amazon, оплаты за использование S3cmd явно нет :-)
Файлы, хранящиеся в S3, называются «объектами», а их имена официально называются «ключами». Поскольку это иногда сбивает пользователей с толку, мы часто называем объекты «файлами» или «удаленными файлами». Каждый объект принадлежит ровно одному «ведру».
Для описания объектов в хранилище S3 мы придумали URI-подобную схему в следующем виде:
s3://BUCKET
или
s3://BUCKET/OBJECT
Ведра — это что-то вроде каталогов или папок с некоторыми ограничениями:
Рекомендуется использовать имена корзин, совместимые с DNS. Это, например, означает, что вам не следует использовать символы верхнего регистра. Хотя соответствие DNS строго не требуется, некоторые функции, описанные ниже, недоступны для DNS-несовместимых именованных сегментов. Еще один шаг вперед — использование полного доменного имени (FQDN) для корзины, что дает еще больше преимуществ.
Найдите раздел «Виртуальные хосты» далее в этом тексте для получения более подробной информации об именованных сегментах FQDN.
В отличие от бакетов здесь практически нет ограничений на имена объектов. Это могут быть любые строки UTF-8 длиной до 1024 байт. Интересно, что имя объекта может содержать косую черту (/), поэтому my/funny/picture.jpg
является допустимым именем объекта. Обратите внимание, что здесь нет ни каталогов, ни сегментов с именами my
и funny
— на самом деле это одно имя объекта с именем my/funny/picture.jpg
, и S3 совершенно не заботится о том, что оно выглядит как структура каталогов.
Полный URI такого изображения может быть, например:
s3://my-bucket/my/funny/picture.jpg
Файлы, хранящиеся в S3, могут быть частными или общедоступными. Частные доступны для чтения только пользователю, который их загрузил, а общедоступные могут быть прочитаны кем угодно. Кроме того, доступ к общедоступным файлам можно получить по протоколу HTTP, а не только с помощью s3cmd
или аналогичного инструмента.
ACL (список контроля доступа) файла можно установить во время загрузки с помощью параметров --acl-public
или --acl-private
с помощью команд s3cmd put
или s3cmd sync
(см. ниже).
В качестве альтернативы ACL можно изменить для существующих удаленных файлов с помощью команды s3cmd setacl --acl-public
(или --acl-private
).
Перейдите на https://aws.amazon.com/s3, нажмите кнопку «Зарегистрироваться на веб-сервисе» в правом столбце и пройдите регистрацию. Вам необходимо будет предоставить данные своей кредитной карты, чтобы Amazon мог взимать с вас плату за использование S3. В конце у вас должны быть ключи доступа и секретные ключи.
Если вы настроили отдельного пользователя IAM, ключ доступа этого пользователя должен иметь как минимум следующие разрешения для выполнения каких-либо действий:
Другие примеры политик можно найти по адресу https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.html.
s3cmd --configure
Вам будет предложено ввести два ключа — скопируйте и вставьте их из электронного письма с подтверждением или со страницы своей учетной записи Amazon. Будьте осторожны при их копировании! Они чувствительны к регистру и должны быть введены точно, иначе вы будете продолжать получать ошибки о недействительных подписях и тому подобном.
Не забудьте добавить к ключам разрешения s3:ListAllMyBuckets, иначе при проверке доступа вы получите ошибку AccessDenied.
s3cmd ls
чтобы получить список всех ваших сегментов.Поскольку вы только начали использовать S3, на данный момент у вас нет принадлежащих вам сегментов. Таким образом, вывод будет пустым.
s3cmd mb s3://my-new-bucket-name
Как упоминалось выше, имена сегментов должны быть уникальными среди всех пользователей S3. Это означает, что простые имена, такие как «test» или «asdf», уже заняты, и вам нужно придумать что-то более оригинальное. Чтобы продемонстрировать как можно больше функций, давайте создадим корзину с полным доменным именем s3://public.s3tools.org
:
$ s3cmd mb s3://public.s3tools.org
Bucket 's3://public.s3tools.org' created
s3cmd ls
Теперь вы должны увидеть только что созданную корзину:
$ s3cmd ls
2009-01-28 12:34 s3://public.s3tools.org
$ s3cmd ls s3://public.s3tools.org
$
Там действительно пусто.
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml
some-file.xml -> s3://public.s3tools.org/somefile.xml [1 of 1]
123456 of 123456 100% in 2s 51.75 kB/s done
Загрузите дерево с двумя каталогами в виртуальный «каталог» корзины:
$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/
File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]
Как видите, нам не нужно было создавать каталог /somewhere
. На самом деле это всего лишь префикс имени файла, а не реальный каталог, и его не нужно создавать заранее.
Вместо использования put
с опцией --recursive
вы также можете использовать команду sync
:
$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
$ s3cmd ls s3://public.s3tools.org
DIR s3://public.s3tools.org/somewhere/
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
Используйте --recursive (или -r) для вывода списка всех удаленных файлов:
$ s3cmd ls --recursive s3://public.s3tools.org
2009-02-10 05:10 123456 s3://public.s3tools.org/somefile.xml
2009-02-10 05:13 18 s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13 16 s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13 11 s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13 8 s3://public.s3tools.org/somewhere/dir2/file2-2.txt
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml
s3://public.s3tools.org/somefile.xml -> some-file-2.xml [1 of 1]
123456 of 123456 100% in 3s 35.75 kB/s done
$ md5sum some-file.xml some-file-2.xml
39bcb6992e461b269b95b3bda303addf some-file.xml
39bcb6992e461b269b95b3bda303addf some-file-2.xml
Контрольная сумма исходного файла совпадает с контрольной суммой полученного. Похоже, это сработало :-)
Чтобы получить все «дерево каталогов» из S3, используйте рекурсивный метод get:
$ s3cmd get --recursive s3://public.s3tools.org/somewhere
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'
Поскольку каталог назначения не был указан, s3cmd
сохранил структуру каталогов в текущем рабочем каталоге ('.').
Существует важная разница между:
get s3://public.s3tools.org/somewhere
и
get s3://public.s3tools.org/somewhere/
(обратите внимание на косую черту)
s3cmd
всегда использует последнюю часть пути, то есть слово после последней косой черты, для именования файлов.
В случае s3://.../somewhere
последняя часть пути — «где-то», и поэтому рекурсивный метод get называет локальные файлы как где-то/каталог1, где-то/каталог2 и т. д.
С другой стороны, в s3://.../somewhere/
последняя часть пути пуста, и s3cmd создаст только «dir1» и «dir2» без префикса «somewhere/»:
$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'
Видеть? Это ~/dir1
, а не ~/somewhere/dir1
как в предыдущем примере.
Удалите все под s3://public.s3tools.org/somewhere/.
$ s3cmd del --recursive s3://public.s3tools.org/somewhere/
File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...
Теперь попробуйте удалить ведро:
$ s3cmd rb s3://public.s3tools.org
ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty
Ой, мы забыли о s3://public.s3tools.org/somefile.xml
. В любом случае мы можем принудительно удалить корзину:
$ s3cmd rb --force s3://public.s3tools.org/
WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed
Основное использование так же просто, как описано в предыдущем разделе.
Вы можете увеличить уровень детализации с помощью опции -v
, и если вам действительно интересно узнать, что программа делает под капотом, запустите ее с -d
чтобы увидеть весь «отладочный» вывод.
После настройки с помощью --configure
все доступные параметры будут записаны в ваш файл ~/.s3cfg
. Это текстовый файл, который можно изменить в вашем любимом текстовом редакторе.
Команды передачи (put, get, cp, mv и sync) продолжают передачу, даже если объект выходит из строя. Если происходит сбой, он выводится на stderr, и статус выхода будет EX_PARTIAL (2). Если указан параметр --stop-on-error
или параметр конфигурации stop_on_error имеет значение true, передача прекращается и возвращается соответствующий код ошибки.
Для получения дополнительной информации посетите домашнюю страницу S3cmd/S3tools.
Авторские права (C) 2007–2023 TGRMN Software (https://www.tgrmn.com), Sodria SAS (https://www.sodria.com/) и участники
Эта программа является бесплатным программным обеспечением; вы можете распространять его и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения; либо версию 2 Лицензии, либо (по вашему выбору) любую более позднюю версию.
Данная программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. Дополнительную информацию см. в Стандартной общественной лицензии GNU.