繁体   English   中英

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

[英]How can i list all the S3 buckets with some specific tag using cli?

我正在尝试使用环境和服务标签获取所有 S3 存储桶 我有将近 200 个桶……我该怎么做……请帮帮我

aws s3api list-buckets 

上面的命令列出了所有带有创建日期的存储桶名称...如何列出所有带有特定标签的存储桶。 我搜索了很多博客,但我无法获得获取带有标签的存储桶的确切命令。我尝试使用 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 

您应该使用“get-bucket-tagging”api 来获取与您的存储桶关联的标签。

https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-tagging.html

我在 github 中找到了一个简单的脚本来完成这项工作。 我希望这对你有用。

https://gist.github.com/filipenf/0528d26f0dba78b72b39

如果您的目标是查找具有特定标签的资源(例如 Amazon EC2 实例、Amazon S3 存储桶),请查看 什么是 AWS 资源组?

您可以使用资源组来组织您的 AWS 资源。 资源组可以更轻松地同时管理和自动化大量资源上的任务。 本指南向您展示如何在 AWS 资源组中创建和管理资源组。

您可以通过 AWS resource-groups CLI 执行此操作

示例: https : //awscli.amazonaws.com/v2/documentation/api/latest/reference/resource-groups/search-resources.html#examples

但是 Web UI 似乎更强大,它由指向每个资源的链接和到 csv 的导出选项组成。 https://console.aws.amazon.com/resource-groups/tag-editor/find-resources

我找不到一种明智的方法来做到这一点,我认为您甚至无法通过用户界面中的标签进行搜索。

但是你可以做类似的事情

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 个存储桶,而且我不想每次需要按标签获取存储桶名称时都这样做。

暂无
暂无

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

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