모든 AWS S3 버킷을보고 사용 된 각 버킷 스토리지를 나열하십시오.


11

여러 AWS 계정이 있으며 계정 당 모든 S3 버킷 을 나열한 다음 각 버킷의 총 크기를 확인해야합니다.

현재 단일 S3 버킷 의 스토리지 크기 만 볼 수 있습니다 .

aws s3 ls s3://mybucket --recursive --human-readable --summarize

S3 Select는 며칠 전 re : invent 2017에서 출시되었습니다. twitch.tv/videos/206752912
Abdennour TOUMI

: 당신은 내가 같은 일 자신 달성하기 위해 쓴이 코드를 시도 할 수도 github.com/insperitas/s3-data
jimmy978654321을

답변:


11

해상도 1

그래서 나는 다음 스크립트로 이것을 해결했다. 내가 알지 못하는 더 쉬운 방법이있는 경우를 대비하여 원래 질문을 게시했습니다.

#!/bin/bash
aws_profile=('profile1' 'profile2' 'profile3');

#loop AWS profiles
for i in "${aws_profile[@]}"; do
  echo "${i}"
  buckets=($(aws --profile "${i}" --region your_region s3 ls s3:// --recursive | awk '{print $3}'))

  #loop S3 buckets
  for j in "${buckets[@]}"; do
  echo "${j}"
  aws --profile "${i}" --region your_region s3 ls s3://"${j}" --recursive --human-readable --summarize | awk END'{print}'
  done

done

해상도 2

사용 대시 보드 에서 CloudWatch에서를 AWS 콘솔에서.

그런 다음 모든 S3 버킷을 지정하고 숫자 통계를 추가하여 스토리지 크기 지표를 표시 할 수 있습니다.

이것은 많은 API 호출 비용이 들지 않으며 s3 버킷의 크기에 따라 상당히 빠를 수 있습니다 (매우 큰 버킷에서 크기를 얻는 데 꽤 오래 걸립니다).

평결

대시 보드 (만들기 해결 방법 2 각 AWS 계정에하는) 가장 효율적인 옵션을이었다 나를 위해 나를 로그인 각 AWS는 끝까지 스크립트 API 호출을 기다리는 것보다 계정에서 수동 측정을 잡아하는 것이 빠른 방법입니다 원인이된다. :(


| awk END'{print}'?
Tensibai

1
재귀 옵션을 사용하면 모든 폴더 및 파일의 크기가 표시되며 버킷의 총 크기 출력 만 필요합니다.
Kyle Steenkamp

대시 보드에 무엇이든 표시하려면 '1 일'이상의 기간을 선택해야합니다.
Jeremy Leipzig

2
대시 보드에는 현재 3 달러의 비용이 있으므로 Resolution 2에서 제안 된 솔루션은 Cloudwatch 비용을 증가시킵니다. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

무엇은하지 [@]"${buckets[@]}"평균?

3

내가 아는 한,이를 수행하는 도구 또는 cli 기능이 없기 때문에이 데이터를 구문 분석하고 쿼리하는 스크립트를 작성해야합니다. 다행히이 모든 정보를 CLI로 수집 할 수 있습니다.

  1. 조직의 모든 계정을 나열 하고 구문 분석하십시오.

    aws organizations list-accounts
    
  2. 각 계정에 대해 모든 버킷을 나열 하고 구문 분석하십시오.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. 마지막으로 각 계정 내에서 각 버킷의 크기를 확인하십시오. 이전과 동일한 cli 명령을 사용할 수 있지만 버킷에있는 각 항목의 개별 크기를 나열한다는 경고가 표시됩니다. 이 cli 명령을 사용하여 버킷 크기를 얻을 수도 있습니다.

    aws s3api list-objects --bucket BUCKETNAME --output json --query "
    [sum(Contents[].Size), length(Contents[])]"
    

1
1. AWS 계정의 프로파일 정보를 나열하지 않습니다. 이 정보가 저장되는 위치 난 그냥 내가 아래에 게시 된 스크립트의 값을 하드 코딩 그래서 AWS 설정 파일에서이 정규식 시간이 없었다
카일 Steenkamp

2

찾을 수없는 도구가 없으면 스크립트를 작성해야합니다.

여러 AWS 계정으로 작업하는 경우 버킷 크기를 얻으려면 계정 간을 전환해야합니다.

모든 버킷과 총 크기를 얻으려면 ' aws s3api '를 사용할 수 있습니다 . 를 사용 list-buckets하면 하나의 계정에서 모든 버킷을 얻을 수 있으며 크기를 나열하고 다음 계정을 시도 할 수 있습니다.


1
:이 할 boto3와 파이썬 스크립트를 작성 gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c을 (양동이에있는 모든 개체의 크기를 합산하지 않고 / 버킷 효율적으로 크기 끌어 CloudWatch에서의 GetMetricStatistics를 사용하여 노트)
리드

1

버전 관리가 켜져 있고 방대한 양의 데이터가 "삭제"된 경우 버킷 크기가 표시되지 않습니다. S3 GUI 콘솔에서 측정 항목 탭에 청구 대상이 표시됩니다.

/server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket 에있는 스크립트에서 다음 명령을 폐기했습니다 . Windows에서 잘 작동합니다. 대체 yourregionyourbucketname:

aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2019-05-09T00:01:00Z --end-time 2019-05-11T23:59:00Z --period 86400 --statistics Average --region yourregion --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=yourbucketname Name=StorageType,Value=StandardStorage

이것은 시작 및 종료 시간에 의해 제한되는 일 동안 평균 크기 (바이트)를 제공합니다. 버킷에 Versioning Enabled (활성화)가 있고 대량의 데이터를 "삭제"한 경우 충격을 받을 수 있습니다 .

버전 관리 사용 버킷을 정리하려면 LifeCycle 규칙을 설정해야합니다. 이전 버전을 영구적으로 삭제하도록 선택할 수 있습니다. 전환 단계에서 확인란을 생략 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.