Утилита s3cmd Для Amazon Simple Storage Service

Aug 24, 2015 11:35 · 475 words · 3 minute read backup scripts amazon

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/.

tweet Share