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

问题描述 投票:0回答:5

使用 AWS CLI,如何输出 S3 对象的最新 VersionId 字符串?

amazon-web-services amazon-s3 aws-cli
5个回答
22
投票

简化@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

4
投票
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


3
投票

还有另一个选项可以获取最新的 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,就很容易获得此类详细信息。


1
投票

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

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

没有记录,但对对象的

HEAD
请求似乎返回最新版本的元数据。


0
投票

aws s3api list-object-versions --bucket my-new-bucket-04 --prefix files/file1.txt

用 files/file1.txt 替换对象名称

© www.soinside.com 2019 - 2024. All rights reserved.