Восстановление объектов Amazon S3 из GLACIER не работает с Python boto3

#python #python-3.x #amazon-web-services #amazon-s3 #boto3

Вопрос:

Попытка восстановить объект Amazon S3 из GLACIER с помощью приведенного ниже кода.

 import boto3

s3 = boto3.resource('s3', verify=False)

bucket_name = r"my-source-bucket"
bucket = s3.Bucket(bucket_name)
key ="glacier_file2.txt"

try:
    bucket.meta.client.restore_object(Bucket=bucket_name, Key=key, RestoreRequest={'Days': 1, 'GlacierJobParameters': {'Tier': 'Expedited'}})
except Exception as e:
    print({"Problem Restoring": str(e)})
 

Код отправляется успешно, однако объект по-прежнему отображается как в GLACIER в консоли AWS, а также когда я запрашиваю его с помощью boto3 даже спустя несколько дней. Если я запущу следующий код, я увижу, что он все еще показывает ЛЕДНИК.

 key = s3.Object(bucket_name,key)
print (key.storage_class)
print (key.restore)

>>>>GLACIER
>>>>ongoing-request="false", expiry-date="Sun, 19 Sep 2021 00:00:00 GMT"
 

Когда я пытаюсь сделать то же самое в консоли AWS, я вижу, что там написано, что это и в GLACIER, И восстановление завершено?

введите описание изображения здесь

У кого-нибудь есть какое-нибудь представление? После восстановления я действительно могу загрузить файл, что говорит мне о том, что на самом деле он не в GLACIER, несмотря на то, что он находится в браузере, а также в boto3. Что-то не так с тем, как сообщается о классе хранилища после восстановления?

правка Я должен отметить, что я выполняю ускоренное восстановление, которое занимает всего несколько минут.

Ответ №1:

Проведя еще немного исследований, выясняется, что «восстановление» — это не то, чего можно было бы ожидать. Как только объект попадает в ЛЕДНИК, пути назад нет, кроме как «временно» восстановить его (как я сделал выше), а затем перезаписать. Например, я смог запустить эту команду после восстановления glacier_file2.txt

 aws s3 cp s3://my-source-bucket/glacier_file2.txt s3://my-source-bucket/glacier_file2.txt --force-glacier-transfer --storage-class STANDARD
 

https://newbedev.com/how-do-i-restore-from-aws-glacier-back-to-s3-permanently

Это не сработало бы, если бы я не запустил временное восстановление ЛЕДНИКА.