Поиск по сайту:

Как синхронизировать файлы из Linux в Amazon S3


AWS S3 — это сервис облачного хранения Amazon, позволяющий хранить отдельные файлы как объекты в корзине. Вы можете загружать файлы из командной строки на вашем сервере Linux или даже синхронизировать целые каталоги с S3.

Если вы просто хотите обмениваться файлами между экземплярами EC2, вы можете использовать том EFS и подключить его напрямую к нескольким серверам, полностью исключив «облако». Но не стоит использовать его для всего, потому что он намного дороже, чем S3, даже с включенным нечастым доступом.

Ограничение доступа к S3 для пользователя IAM

Вашему серверу, вероятно, не требуется полный root-доступ к вашей учетной записи AWS, поэтому, прежде чем выполнять какую-либо синхронизацию файлов, вам следует создать нового пользователя IAM для использования на вашем сервере. С пользователем IAM вы можете ограничить свой сервер только управлением корзинами S3.

В консоли управления IAM создайте нового пользователя и включите «Программный доступ».

Вам будет предложено выбрать разрешения для этого пользователя. Создайте новую группу и назначьте ей разрешение «AmazonS3FullAccess».

После этого вам будет предоставлен ключ доступа и секретный ключ. Запишите их; они понадобятся вам для аутентификации вашего сервера.

Вы также можете вручную назначить более подробные разрешения S3, такие как разрешение на использование определенного сегмента или только на загрузку файлов, но в большинстве случаев ограничение доступа только к S3 должно быть приемлемым.

Синхронизация файлов с помощью s3cmd

s3cmd – это утилита, упрощающая работу с S3 из командной строки. Он не является частью интерфейса командной строки AWS, поэтому вам придется установить его вручную из диспетчера пакетов вашего дистрибутива. Для систем на основе Debian, таких как Ubuntu, это будет:

sudo apt-get install s3cmd

После установки s3cmd вам нужно будет связать его с пользователем IAM, которого вы создали для управления S3. Запустите конфигурацию с помощью:

s3cmd --configure

Вам будет предложено ввести ключ доступа и секретный ключ, которые предоставила вам Консоль управления IAM. Вставьте их сюда. Есть еще несколько вариантов, таких как изменение конечных точек для S3 или включение шифрования, но вы можете оставить их все по умолчанию и просто выбрать «Y» в конце, чтобы сохранить конфигурацию.

Чтобы загрузить файл, используйте:

s3cmd put file s3://bucket

Замените «ведро» на имя вашего ведра. Чтобы получить эти файлы, запустите:

s3cmd get s3://bucket/remotefile localfile

И, если вы хотите синхронизировать весь каталог, запустите:

s3cmd sync directory s3://bucket/

Это скопирует весь каталог в папку в S3. При следующем запуске будут скопированы только те файлы, которые изменились с момента последнего запуска. Он не удалит файлы, если вы не запустите его с параметром --delete-removed .

s3cmd sync не запускается автоматически, поэтому, если вы хотите регулярно обновлять этот каталог, вам нужно будет регулярно запускать эту команду. Вы можете автоматизировать это с помощью cron; Откройте свой crontab с помощью crontab -e и добавьте в конец эту команду:

0 0 * * * s3cmd sync directory s3://bucket >/dev/null 2>&1

Это будет синхронизировать «каталог» с «ведро» один раз в день. Кстати, если crontab -e застрял в vim, вы можете изменить текстовый редактор по умолчанию с помощью export VISUAL=nano; или в зависимости от того, что вы предпочитаете.

s3cmd имеет множество подкоманд; вы можете копировать между сегментами с помощью cp, перемещать файлы с помощью mv и даже создавать и удалять сегменты из командной строки с помощью mb и руб. соответственно. Используйте s3cmd -h для получения полного списка.

Другой вариант: AWS CLI

Помимо s3cmd, есть несколько других параметров командной строки для синхронизации файлов с S3. AWS предоставляет собственные инструменты с интерфейсом командной строки AWS. Вам понадобится Python 3+, и вы можете установить CLI из pip3 с помощью:

pip3 install awscli --upgrade --user

Это установит команду aws , которую можно использовать для взаимодействия с сервисами AWS. Вам нужно будет настроить его так же, как s3cmd, что вы можете сделать с помощью:

aws configure

Вам будет предложено ввести ключ доступа и секретный ключ для вашего пользователя IAM.

Синтаксис AWS CLI аналогичен s3cmd. Чтобы загрузить файл, используйте:

aws s3 cp file s3://bucket

Чтобы синхронизировать всю папку, используйте:

aws s3 sync folder s3://bucket

Вы можете копировать и даже синхронизировать корзины с помощью одних и тех же команд. Вы можете использовать aws help для получения полного списка команд или прочитать справочник по командам на их веб-сайте.

Полные резервные копии: Restic, Duplicity

Если вы хотите делать большие резервные копии, вы можете использовать другой инструмент, а не простую утилиту синхронизации. При синхронизации с S3 с помощью s3cmd или AWS CLI любые внесенные вами изменения перезапишут текущие файлы. Поскольку основной проблемой облачного хранилища файлов обычно является не сбой диска, а случайное удаление без доступа к истории изменений, это проблема.

AWS поддерживает управление версиями файлов, что отчасти решает эту проблему, но вы все же можете использовать более мощную программу резервного копирования, чтобы справиться с этим самостоятельно, особенно если вы делаете резервные копии всего диска.

Duplicity — простая утилита, которая создает резервные копии файлов в виде зашифрованных томов TAR. Первый архив представляет собой полную резервную копию, а все последующие архивы являются инкрементными, сохраняя только изменения, сделанные с момента последнего архивирования.

Это очень эффективно, но восстановление из резервной копии менее эффективно, так как процесс восстановления должен следовать цепочке изменений, чтобы достичь конечного состояния данных. Restic решает эту проблему, сохраняя данные в дедуплицированных зашифрованных блоках и сохраняя снимок каждой версии для восстановления. Таким образом, на текущее состояние файлов легко ссылаться, и каждая ревизия по-прежнему доступна.

Оба инструмента можно настроить для работы с AWS S3, а также с несколькими другими поставщиками хранилищ. В качестве альтернативы, если вы просто хотите создать резервную копию инстансов EC2 на основе EBS, вы можете использовать инкрементные моментальные снимки EBS, хотя это дороже, чем резервное копирование вручную на S3.