我使用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来做所有事情。
答案 0 :(得分:1)
S3没有返回对象列表/对象版本列表以及对象元数据/对象版本元数据的API操作。
从理论上讲,您可以使用S3进行所有操作,您只需遍历对象列表并针对每个对象版本发送HEAD请求-使用SDK比使用CLI更容易-但这并非没有代价。每个请求的费用和执行时间,因此最好使用外部数据库。 (我使用一个,但是它使用RDS MariaDB而不是DynamoDB)。 S3 Event Notifications和AWS Lambda函数可以为您维护这样的外部索引,因此您不必从最初创建对象的代码中进行构建。