Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 博托';s Glacier-to-S3 restore()函数不工作_Python 2.7_Amazon Web Services_Amazon S3_Boto_Amazon Glacier - Fatal编程技术网

Python 2.7 博托';s Glacier-to-S3 restore()函数不工作

Python 2.7 博托';s Glacier-to-S3 restore()函数不工作,python-2.7,amazon-web-services,amazon-s3,boto,amazon-glacier,Python 2.7,Amazon Web Services,Amazon S3,Boto,Amazon Glacier,我对python和boto提供的S3/Glacier集成接口都相当陌生。然而,我发现了一些似乎特别未记录/未解决的缺陷,这些缺陷严重阻碍了我当前工作项目的进展 我最近遇到的难题是boto库中的restore()函数。很简单,它根本不起作用。有一段时间我怀疑这个问题与键对象跟踪存储在S3存储桶中的数据的存储类不一致有关。本页可作为该问题的某些细节的参考资料: 详述密钥< /代码>一致性问题,请考虑关于S3:已被归档为冰川的对象的以下场景 from boto.s3.connection import

我对python和
boto
提供的S3/Glacier集成接口都相当陌生。然而,我发现了一些似乎特别未记录/未解决的缺陷,这些缺陷严重阻碍了我当前工作项目的进展

我最近遇到的难题是
boto
库中的
restore()
函数。很简单,它根本不起作用。有一段时间我怀疑这个问题与
对象跟踪存储在S3存储桶中的数据的
存储类
不一致有关。本页可作为该问题的某些细节的参考资料:

详述<代码>密钥< /代码>一致性问题,请考虑关于S3:

已被归档为冰川的对象的以下场景
from boto.s3.connection import S3Connection
from boto.s3.key import Key
...
conn = S3Connection(access_key_id, secret_key)
bucket = conn.get_bucket(bucket_name)
key_object = Key(bucket)

print bucket.get_key(filename).storage_class
...
key_object.key = filename
for item in bucket.list():
    if item.key == filename:
        break

print item.storage_class
一些澄清。我知道在桶中搜索钥匙的
for
循环效率极低,但这恰恰是个谜

第一个
print
语句将产生:
u'STANDARD'

第二个:
u'GLACIER'

现在,我相信这种不一致性正在影响
restore()
操作的效率。如果我尝试对我上面列出的任何一个“键”派生进行
key.restore(days=num_days)
,它们都不表明它对将对象从冰川恢复到标准S3可访问性有任何影响。此外,尝试
还原
会返回
。在这一点上,我完全不知道什么可以解释这个故障。这是不是我在程序上出了问题?或者说,
boto
有什么天生的缺陷吗

如果您能为我提供任何帮助,我将不胜感激

多谢各位


注意:我没有忘记基本的错误检查,即文件是否存在于存储桶中?文件已经还原了吗?等等。

如果您已经在跟踪文件名,您是否尝试通过


使用key.continuousing\u restore获取还原状态

我弄明白了我的困惑是什么。一旦物体在冰川上,它就会留在冰川上。它可以被还原,以便下载,但它的存储类永远不会从Glacier更改回S3标准(为此,您必须制作对象的副本,并确保副本位于标准存储中)


密钥不一致仍然是一个问题,但我找到了一些解决方法(我最好避免,但目前我没有选择)。

是的,我尝试使用get_Key()生成一个正确的密钥对象,虽然它确实返回一个显然与目标Glacier对象关联的密钥,当我调用进行中的_restore()时,它返回“STANDARD”而不是“GLACIER”。我最初问题中的for循环演示了bucket方法在检索关键对象时的不一致性,这当然可能是这种疯狂行为中隐藏的问题的一部分。让我困惑的是,恢复应该是boto的一个基本的、功能齐全的功能,因为一旦你用boto存档,你只能用boto检索。我知道这是一年后的事,但你能分享一下你使用的黑客吗?我也在努力解决这个问题。我知道这也是一年后的事了,但我很确定我刚刚用我的问题中的代码创建了一个函数:迭代bucket.list(),打破项的键和目标文件名之间的匹配,然后返回
str(item.storage\u class)
。这是我第一次实习时写的,据我所知,它仍在使用,没有人对此有任何抱怨。
conn = S3Connection(access_key_id, secret_key)
bucket = conn.get_bucket(bucket_name)
key = bucket.get_key(filename)
key.restore(days=5)