Amazon S3 버킷의 크기 (바이트 및 항목 수)를 그래프로 표시하고 데이터를 얻는 효율적인 방법을 찾고 있습니다.
s3cmd 도구를 사용하여 전체 파일 크기를 얻을 수있는 방법을 제공 s3cmd du s3://bucket_name
하지만, 나는 모든 파일에 대한 데이터를 가져 와서 자신의 합계를 계산 것 같습니다 이후 확장 할 수있는 능력에 대한 걱정. Amazon은 GB- 월 단위로 사용자에게 요금을 청구하므로이 값을 직접 노출하지 않는 것이 이상합니다.
Amazon의 REST API 는 버킷에있는 항목 수를 반환 하지만 s3cmd 는이를 표시하지 않는 것 같습니다. 나는 할 수 s3cmd ls -r s3://bucket_name | wc -l
있지만 그것은 해킹처럼 보인다.
Ruby AWS :: S3 라이브러리는 유망 해 보였지만 전체 버킷 크기가 아니라 버킷 항목 수만 제공합니다.
누구나이 데이터를 얻는 방법을 제공하는 다른 명령 줄 도구 또는 라이브러리 (Perl, PHP, Python 또는 Ruby 선호)를 알고 있습니까?
답변
AWS CLI는 이제 JMESPath 표현식 --query
을 취하는 매개 변수를 지원합니다 .
이것은 당신에 의해 주어진 크기 값의 합 수 있다는 것을 의미합니다 list-objects
사용 sum(Contents[].Size)
과 같은 계산을 length(Contents[])
.
이것은 아래와 같이 공식 AWS CLI를 사용하여 실행할 수 있으며 2014 년 2 월 에 도입되었습니다.
aws s3api list-objects --bucket BUCKETNAME --output json --query "[sum(Contents[].Size), length(Contents[])]"
답변
이제 공식 AWS 명령 행 클라이언트만으로 간단하게 수행 할 수 있습니다.
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/
전체 버킷을 계산하지 않으려는 경우 경로 접두사도 허용합니다.
aws s3 ls --summarize --human-readable --recursive s3://bucket-name/directory
답변
AWS 콘솔 :
현재 년 7 월 2015 년 28 일 이 정보를 얻을 수 있습니다 CloudWatch를 통해를 . GUI를 원하는 경우 CloudWatch 콘솔 로 이동 하십시오 ((지역 선택>) 지표> S3).
AWS CLI 명령 :
합계를 계산하기 위해 각 파일의 크기를 개별적으로 쿼리하지 않기 때문에 여기에 게시 된 다른 명령보다 훨씬 빠릅니다.
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time 2015-07-15T10:00:00 --end-time 2015-07-31T01:00:00 --period 86400 --statistics Average --region eu-west-1 --metric-name BucketSizeBytes --dimensions Name=BucketName,Value=toukakoukan.com Name=StorageType,Value=StandardStorage
중요 : dimension 인수에 StorageType과 BucketName을 모두 지정해야합니다. 그렇지 않으면 결과가 표시되지 않습니다. 변경 할 필요가있다 --start-date
, --end-time
하고 Value=toukakoukan.com
.
여기에 사용자가 지정하는 것을 방지하기 위해 사용할 수있는 bash는 스크립트의 --start-date
및 --end-time
수동은.
#!/bin/bash
bucket=$1
region=$2
now=$(date +%s)
aws cloudwatch get-metric-statistics --namespace AWS/S3 --start-time "$(echo "$now - 86400" | bc)" --end-time "$now" --period 86400 --statistics Average --region $region --metric-name BucketSizeBytes --dimensions Name=BucketName,Value="$bucket" Name=StorageType,Value=StandardStorage
답변
s3cmd 는 다음을 수행 할 수 있습니다.
s3cmd du s3://bucket-name
답변
사용 보고서 를 다운로드 하면 TimedStorage-ByteHrs
필드 의 일일 값을 그래프로 표시 할 수 있습니다 .
GiB에서 해당 숫자를 원하면 1024 * 1024 * 1024 * 24
(24 시간주기의 GiB 시간)으로 나눕니다 . 바이트 단위의 숫자를 원하면 24로 나누고 그래프를 그리십시오.
답변
공식 AWS s3 명령 줄 도구 사용 :
aws s3 ls s3://bucket/folder --recursive | awk 'BEGIN {total=0}{total+=$3}END{print total/1024/1024" MB"}'
이것은 더 나은 명령 입니다. --summarize --human-readable --recursive
뒤에 다음 3 개의 매개 변수를 추가하십시오 aws s3 ls
. --summarize
필요하지는 않지만 전체 크기를 멋지게 터치합니다.
aws s3 ls s3://bucket/folder --summarize --human-readable --recursive
답변
s4cmd는 내가 찾은 가장 빠른 방법입니다 (Python으로 작성된 명령 줄 유틸리티).
pip install s4cmd
이제 여러 스레드를 사용하여 전체 버킷 크기를 계산하려면
s4cmd du -r s3://bucket-name