获取 AWS S3 存储桶中对象的所有版本?

2024-01-26

我已在存储桶上启用对象版本控制。我想获取该存储桶内密钥的所有版本。但我找不到这样做的方法;如何使用 S3 API 来实现这一目标?


所以,今天早上我遇到了这堵砖墙。事实证明,这件看似微不足道的事情做起来非常困难。

您想要的 API 是获取桶对象版本 https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETVersion.htmlAPI,但遗憾的是它的使用并不简单。

首先,你必须避开一些非解决方案:KeyMarker,记录为boto3 as,

关键标记 (string)-- 指定列出存储桶中的对象时从哪个键开始。

…列出存储桶中的对象时不以指定键开头;相反,它立即开始after那个键,这使得它在这里有点无用。

这个API提供的最好的限制是Prefix;这并不完美,因为可能有一些不是我们感兴趣的密钥,但仍然包含我们的密钥。

还要提防MaxKeys;人们很容易认为,按字典顺序,我们的键应该是第一个,并且所有以我们的键作为其键名前缀的键都将跟随,因此我们可以使用MaxKeys;可悲的是,MaxKeys控制的不是响应中返回的密钥数量,而是版本的数量。 (我假设事先不知道这一点。)

So, Prefix似乎是能做到的最好的事情。另请注意,至少在某些语言中,客户端库不会为您处理分页,因此您还需要处理该问题。

作为一个例子boto3:

response = client.list_object_versions(
    Bucket=bucket_name, Prefix=key_name,
)
while True:
    # Process `response`
    ...
    # Check if the results got paginated:
    if response['IsTruncated']:
        response = client.list_object_versions(
            Bucket=bucket_name, Prefix=key_name,
            KeyMarker=response['NextKeyMarker'],
            VersionIdMarker=response['NextVersionIdMarker'],
        )
    else:
       break
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 AWS S3 存储桶中对象的所有版本? 的相关文章

随机推荐