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