如何使用cli列出所有带有特定标签的S3存储桶?

9

我正在尝试获取所有带有环境和服务标签的S3存储桶。 我有近200个存储桶...我该怎么做...请帮帮我。

aws s3api list-buckets 

上述命令列出了所有的Bucket名称以及创建日期...我该如何列出带有特定标签的所有Bucket呢?我查阅了许多博客,但是没有找到确切的命令来获取带有标签的Bucket。我尝试使用jq命令,例如:
aws s3api list-buckets | jq .Buckets[].Name

我遇到了以下错误:

Invalid numeric literal at line 2, column 0

我的命令"aws s3api list-buckets"的输出结果。
2019-01-24T04:53:07.000Z |  aws-xxx              ||
||  2019-02-18T18:33:15.000Z |  aws-yyy 

@cyrus 它正在列出所有带有创建日期的存储桶。 - Shwettha RR
4个回答

3

@vinu...我尝试了那个脚本,但是如果我运行aws s3api list-buckets | jq .Buckets[].Name,会出现“在第2行,第0列处的无效数字文字”的错误。 - Shwettha RR
@ShwetthaRR 我不知道原因是什么,但我怀疑可能是版本不匹配,因为脚本对我来说运行正常。请告诉我 jq、uname -r 和 shell 版本。我会尝试是否能够重现。 - vinu
jq版本是jq-1.5,我正在使用CentOS 7。 - Shwettha RR

1
如果您的目标是查找具有特定标签的资源(例如 Amazon EC2 实例、Amazon S3 存储桶),请查看 AWS 资源组是什么?
引用: 您可以使用资源组来组织您的 AWS 资源。资源组使得一次性管理和自动化大量资源变得更加容易。本指南向您展示如何在 AWS 资源组中创建和管理资源组。

我需要使用cli列出所有带有环境和服务标签的存储桶。 - Shwettha RR
您似乎在询问许多具有相似要求的问题。您应该考虑使用资源组,它可以同时提供许多不同资源的此类信息。 - John Rotenstein

1
我是一名有用的助手,可以为您翻译文本。

我找不到一个合理的方法来做这件事,我认为你甚至不能在UI中按标签搜索。

但你可以做类似这样的事情

s3_buckets_with_cache() {
  local S3CACHE JSONBUCKETS bucketwithtags tags
  S3CACHE="${DIR_CACHE}/s3buckets.json"
  if [[ ! -f ${S3CACHE} ]]; then
    JSONBUCKETS='{"buckets":[]}'
    IFS=$'\n'
    for bucket in $(aws s3api list-buckets | jq .Buckets[].Name -r); do
      tags=$(aws s3api get-bucket-tagging --bucket "${bucket}" 2>/dev/null)
      # shellcheck disable=SC2181
      [[ "$?" -ne 0 ]] && continue
      tags=$(echo "${tags}" | jq -c '.[][] | {(.Key): .Value}' | jq --slurp .)
      [[ "${tags}" == "[]" ]] && continue
      bucketwithtags="{\"bucket\": \"${bucket}\", \"tags\" : ${tags} }"
      JSONBUCKETS=$(echo "${JSONBUCKETS}" | jq ".buckets += [${bucketwithtags}]")
    done
    echo "${JSONBUCKETS}" >"${S3CACHE}"
  fi
  cat "${S3CACHE}"
}

然后使用以下方式调用:
AWS_BUCKET_NAME=$(s3_buckets_with_cache | jq -r '.buckets[] 
  | select(.tags[].foo == "bar" and .tags[].abc == "xyz") | .bucket')

尽管这没有缓存失效或其他类似的功能,但您可以轻松地检查文件的时间戳并通过此方式使其失效。
我只添加了缓存是因为我必须爬取3000个桶以获取它们的标签,并且我不想每次需要按标签获取桶名称时都要这样做。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接