如何获取包含元数据的 S3 对象版本



我使用 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 函数可以为您维护此类外部索引,这样您就不必从最初创建对象的代码构建它。

最新更新