Утилита s3cmd Для Amazon Simple Storage Service
Aug 24, 2015 11:35 · 475 words · 3 minute read
s3cmd
— бесплатный инструмент командной строки для работы с данными, расположенными в хранилище Amazon S3. Утилита написана на языке программирования python, и благодаря этому может использоваться в операционных системах и Windows, и Linux.
Исходный код и инструкцию по установке можно скачать с SourceForge и с GitHub. Давайте разберемся с ее использованием!
Для работы с утилитой нужно быть зарегистрированным в AWS (Amazon Web Services). Переходим на страницу, регистрируемся, получаем AWS Access Key
и AWS Secret Key
— они нам понадобятся в дальнейшем.
Примечание. На момент написания статьи можно в течении 1 года бесплатно пользоваться сервисом Amazon S3, но с некоторыми ограничениями: объем хранилища 5 ГБ, 20 000 Get-запросов и 2 000 Put-запросов в месяц. При превышении ограничений будет сниматься плата с кредитной карты, указанной при регистрации.
Итак, мы зарегистрировались в AWS, скачали и распаковали архив с исходным кодом утилиты s3cmd
, установили ее командой:
sudo python setup.py install
После этого запускаем:
s3cmd --configure
и вводим полученные AWS Access Key
и AWS Secret Key
(остальные параметры — по желанию). Конфигурационный файл .s3cfg
будет создан в каталоге /home/$USERNAME/
(для Linux).
Примечание. В Windows конфигурационный файл называется s3cmd.ini
и расположен в каталоге c:\users\$USERNAME\AppData\Roaming\s3cmd.ini
.
Описание Amazon S3 гласит: «Сервис Amazon S3 представляет данные в виде объектов (objects), которые хранятся в так называемых «корзинах» (buckets). Каждая корзина вмещает неограниченное количество объектов. Пользователи могут выполнять над ними операции чтения, записи и удаления».
Для проверки работы с хранилищем Amazon S3 можно:
- создать корзину:
s3cmd mb s3://test_bucket
- залить в корзину файл с локального компьютера:
s3cmd put mysql_20150824.sql s3://test_bucket/mysql_20150824.sql
- убедиться, что залитый файл действительно появился в хранилище Amazon S3:
s3cmd ls s3://test_bucket/
- скачать файл с хранилища Amazon S3 на локальный компьютер:
s3cmd get s3://test_bucket/mysql_20150824.sql /home/mysql_20150824_from_s3.sql
Часто используемые опции утилиты s3cmd
:
--dry-run
— вывести список объектов для загрузки на S3 (скачивания с S3), но не выполнять саму загрузку (скачивание);--skip-existing
— пропускать объекты, которые уже существуют в каталоге назначения (только для командget
иsync
);--recursive
— рекурсивная загрузка, скачивание или удаление;--no-check-md5
— не сверять MD5 (сравнивать только имена файлов) при загрузке/скачивании (только для командыsync
);--delete-removed
— удалять объекты в хранилище S3, если они удалены в локальном хранилище;-m MIME/TYPE
— автоматически подбирать MIME-тип содержимого, исходя из расширения файла.
Полный список опций (более 70) можно узнать здесь.
В своих проектах я также использую утилиту s3cmd
для загрузки резервных копий в хранилище Amazon S3. Пример скрипта:
#!/usr/bin/php
<?php
$upload="/usr/bin/s3cmd sync ";
$keys="-m MIME/TYPE --no-check-md5 --skip-existing ";
$host=exec("hostname -f");
$dir_from = "/usr/local/backup/";
$dir_to_daily = " s3://<BUCKET>/".$host."/daily/";
$dir_to_mounthly = " s3://<BUCKET>/".$host."/mounthly/";
if (is_dir($dir_from))
{
if ($dh = opendir($dir_from))
{
while (($file = readdir($dh)) !== false)
{
if($file != "." && $file != "..")
{
if( ! preg_match("/snap|full/", $file))
{
exec($upload.$keys.$dir_from.$file.$dir_to_daily);
}
if( ! preg_match("/snap|incr/", $file))
{
exec($upload.$keys.$dir_from.$file.$dir_to_mounthly);
}
}
}
closedir($dh);
}
}
Примечание. Полные резервные копии (в имени файла есть *full*
) складываем в каталог …/mounthly/
. Инкрементальные резервные копии (в имени файла есть *incr*
) складываем в каталог …/daily/
.