2014-11-24 6 views
6

Я создаю веб-приложение на основе PHP, используя сервисы Amazon S3 и glacier.Переместить файлы между амазонкой S3 в Glacier и наоборот программно используя API

Теперь я хочу дать пользователям сайта возможность выбрать любой файл и сделать его архивом (означает переместить файл с S3 на Glacier) и unarchive (означает переместить файл с ледника на S3).

Я провел некоторое исследование и не нашел возможного способа использования API Amazon.

ПРОБЛЕМА

Как я могу перемещать файлы между S3 и ледником с помощью API?

+0

Вы ознакомились с API-интерфейсами для конфигурации жизненного цикла S3? Я сделал это с помощью Python boto. Не уверен в PHP. – helloV

+3

В этом вопросе создается впечатление, что во-первых, это более глубокое понимание того, как интеграция Glacier S3 на самом деле работает на уровне cconceptual ... ручная миграция в Glacier - это не вещь, а когда файлы восстанавливаются до S3 от ледника, это временно; они также все еще хранятся в леднике, а не возвращаются к S3. –

ответ

4

Вы можете использовать API для определения правил жизненного цикла, которые архивируют файлы с Amazon S3 до ледника Амазонки, и вы можете использовать API для получения временной копии файлов, архивированных на ледник. Однако вы не можете использовать API, чтобы сообщить Amazon S3 о перемещении конкретных файлов в Ледник.

Есть два способа использования Amazon Glacier:

  1. непосредственно через API ледника, который позволяет загружать/скачивать архивы в/из ледника сводов
  2. Через правила жизненного цикла Amazon S3, которые архивировать данные от Amazon S3 в Amazon Glacier

Подключение непосредственно через API Glacier позволяет хранить архивы для длительного хранения, часто используется в качестве замены ленты. Данные, хранящиеся через API Glacier, также должны быть получены через API Glacier. Обычно это делается с помощью обычного корпоративного программного обеспечения для резервного копирования или даже легких продуктов, таких как Cloudberry Backup (Windows) или Arq (Mac).

Использование правил жизненного цикла Amazon S3 позволяет хранить данные в Amazon S3, а затем определять правила, которые определяют, когда данные должны быть заархивированы для Glacier для долгосрочного хранения. Например, данные могут быть заархивированы через 90 дней после создания. Передача данных регулируется lifecycle rules, которые работают на ежедневной основе. Правила могут быть установлены с помощью putBucketLifecycle API call (доступно в PHP SDK), но это определяет только правила - невозможно сделать вызов API, который сообщает S3, чтобы архивировать определенные файлы на Glacier.

Amazon S3 имеет RestoreObject API call (доступно в PHP SDK) для восстановления временной копии данных, заархивированных с ледника, обратно в S3. Обратите внимание, что восстановление данных с ледника занимает 3-5 часов.

+0

Привет, Джон, я столкнулся с такой же проблемой. Пожалуйста, взгляните на мой вопрос, http://stackoverflow.com/q/42692610/5026957 –

16

Вы можете использовать API Glacier для загрузки файла в хранилище Glacier, но я не рекомендую его. Предыдущая версия нашего backup app сделала это. Когда вы загружаете файл, он получает случайное имя. Вы можете добавить свое имя файла в метаданные файла, но если вам нужен список того, что находится в хранилище Glacier, вам нужно запросить, а затем ждать 3-5 часов для списка.

Политика жизненного цикла - это другой способ использования ледника. Текущая версия Arq использует их, потому что каждый объект по-прежнему выглядит как объект S3 (без случайных имен объектов, без задержек с получением списков объектов), но содержимое объекта находится в хранилище Glacier.Единственное отличие состоит в том, что получение содержимого объекта - это двухэтапный процесс: вы должны сделать вызов API request that the object be made downloadable; когда он будет готов, вы можете download его. Также есть «плата за час почасовой платы», которая вступает в игру, если вы запрашиваете, чтобы объекты были загружаемыми с слишком высокой скоростью. Amazon Glacier pricing является сложным.

После того, как объект «Класс хранения ледников», его невозможно вернуть в «Стандартный класс хранения». Вы должны сделать копию объекта «Стандартный класс хранения» и удалить объект Glacier.

Так может быть простое решение вашей проблемы:

  1. Хранить данные в 2 «папки» в S3, «стандарт» и «ледник».
  2. Set a lifecycle policy для перемещения всех объектов в папку «ледник» в хранилище данных ледника КАК МОЖНО СКОРЕЕ.
  3. Если вы хотите переместить объект со стандартного на ледник, copy it в папку ледника и удалить объект в стандартной папке (нет API-интерфейса «move»).
  4. Если вы хотите переместить объект с ледника на стандарт, сделайте POST request to restore; когда он будет восстановлен, скопируйте его в стандартную папку и удалите его из папки ледника.