簡體   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