如何使用元数据获取S3对象版本?

时间:2019-06-06 19:26:04

标签: amazon-web-services amazon-s3 aws-cli

我使用S3版本控制,并希望在版本中添加一些自定义字段并以最便宜的方式进行检索。

理想情况下,自定义字段应显示在aws-cli命令的输出中,如下所示:

aws s3api list-object-versions --bucket mybucket --prefix myfile.md

,无需任何其他n API调用。但是我找不到此端点是否可以返回元数据。

我只能通过单个版本ID来检索元数据:

aws s3api head-object --bucket mybucket --version-id YgLFqd3oM_JBd2Dmwszxy.Up.fFX3xzi --key myfile.md
{
    "VersionId": "YgLFqd3oM_JBd2Dmwszxy.Up.fFX3xzi",
    "ContentLength": 2030,
    "AcceptRanges": "bytes",
    "ContentType": "application/x-yaml",
    "ETag": "\"4e29f3565aca5bf8d196bfabac536f1d\"",
    "LastModified": "Thu, 06 Jun 2019 15:54:22 GMT",
    "Metadata": {
        "comment": "some text"
    }
}

我当前的方法是使用S3对象密钥将元数据存储在DynamoDB中,并将其版本作为主键。但这可能是开销,我只能使用S3来做所有事情。

1 个答案:

答案 0 :(得分:1)

S3没有返回对象列表/对象版本列表以及对象元数据/对象版本元数据的API操作。

从理论上讲,您可以使用S3进行所有操作,您只需遍历对象列表并针对每个对象版本发送HEAD请求-使用SDK比使用CLI更容易-但这并非没有代价。每个请求的费用和执行时间,因此最好使用外部数据库。 (我使用一个,但是它使用RDS MariaDB而不是DynamoDB)。 S3 Event Notifications和AWS Lambda函数可以为您维护这样的外部索引,因此您不必从最初创建对象的代码中进行构建。