Я наконец-то нашел способ делать то, что хотел, и подумал, что задокументирую это, по крайней мере, чтобы, если кто-то еще пытается сделать что-то подобное, они могли бы найти некоторую помощь в моем решении.
Сначала я невозможно восстановить с помощью OutputLocation в RestoreRequest, если я не делаю выбор, но я хочу выполнить восстановление файла, поэтому мне пришлось сделать это по-другому.
Я использовал s3.headObject (), чтобы получить информацию обратно из файла, чтобы я мог определить его состояние. Когда файл находится в стандартном классе хранения, я бы получил что-то вроде этого:
{
AcceptRanges: 'bytes',
LastModified: 2020-06-03T20:53:28.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {}
}
После того, как я переместил его в класс хранилища Glacier, я бы получил что-то вроде:
{
AcceptRanges: 'bytes',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}
Теперь к возвращаемой информации добавлен StorageClass. Теперь самое интересное. Я использовал s3.restoreObject (), чтобы получить файл из Glacier, но это создает только временную копию (по умолчанию 1 день), и эта временная копия удаляется по истечении этого периода, но сохраняет копию в Glacier. Я хотел иметь копию в Standard и удалить копию в Glacier. Мне пришлось попытаться выяснить, когда файлы были восстановлены, чтобы я мог скопировать их в Standard и удалить из Glacier.
Проблема в том, что Glacier по умолчанию занимает 3-5 часов, прежде чем файлы будут скопированы в Standard, поэтому мне пришлось создать процесс для этого. У меня есть процесс, который проверяет каждые 5 минут и проверяет, есть ли какие-либо файлы, которые были временно восстановлены, чтобы я мог скопировать их и удалить копию Glacier. Когда файл находится в процессе извлечения из Glacier и временного копирования, s3.headObject для файла возвращает что-то вроде:
{
AcceptRanges: 'bytes',
Restore: 'ongoing-request="true"',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}
Теперь файл имеет тег восстановления, который говорит, что текущий-запрос = " true ", что сообщило мне, что файл находится в процессе восстановления из Glacier. После того, как файл был восстановлен из Glacier (временно), s3.headObject вернул что-то вроде:
{
AcceptRanges: 'bytes',
Restore: 'ongoing-request="false", expiry-date="Sun, 07 Jun 2020 00:00:00 GMT"',
LastModified: 2020-06-03T20:56:11.000Z,
ContentLength: 147451,
ETag: '"20573fb94e8c715dee562ce04b795708"',
ContentType: 'application/octet-stream',
Metadata: {},
StorageClass: 'GLACIER'
}
Теперь восстановление говорит, что текущий-запрос = "false", поэтому я знаю, что восстановление завершено, и я можно скопировать (s3.copyObject ()) файл в Standard и удалить файл из Glacier.