繁体   English   中英

如何使用 aws cli 获取最新版本的 s3 object?

[英]How do you get the latest version of an s3 object using aws cli?

使用 AWS CLI,我如何 output S3 object 的最新 VersionId 字符串?

简化@rynop 的命令:

aws s3api list-object-versions --bucket us-east-1--aws-blueprint.mydomain.com --prefix my/object/key.ext --query 'Versions[?IsLatest].[VersionId]' --output text

还有另一个选项可以获取最新的 S3 对象 versionId。

要获得它,您只需使用aws s3api put-object-tagging命令为该对象设置标签。 该操作的输出只是最新的对象 versionId。 默认情况下,它以 JSON 形式返回,但使用--output text选项,您将仅将其作为返回字符串获取。

样本:

 $ VERSION_ID=$(aws s3api put-object-tagging --bucket bucket-name --key code.zip --tagging 'TagSet=[{Key=Lambda,Value=golang}]' --output text)
 $ echo $VERSION_ID
 6ubT3rNptpcZNGxEA6Cj2kAastuCyNL1

我相信这是实现它的最佳方式。 listObjectVersions的风险在于您可能有超过分页限制,然后您将不得不从“NextToken”值再次调用它。 但是使用put-object-tagging是这个用例的可靠解决方案。 此外,您还可以在对象上存储更多详细信息。

在我的项目中,我保留了有关负责 lambda 的团队、ZIP 的代码运行时和项目存储库名称的详细信息。 因此,有人发现桶中的 ZIP 很容易获得此类详细信息。

aws s3api list-object-versions --bucket aws-blueprint.mybucket.com --prefix nested-stacks/apig/single-lambda-proxy-with-CORS.yaml | jq -r '.Versions[] | select(.IsLatest == true) | .VersionId'

输出看起来像: o65j.nFiJ00D25lNPyzsbJ7rWktOoKmS

我相信@JohnRotenstein 的答案更简单的版本是:

aws s3api head-object --bucket us-east-1--aws-blueprint.mydomain.com --prefix my/object/key.ext --query 'VersionId' --output text

它没有记录,但 object 上的HEAD请求似乎返回最新版本的元数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM