すべての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

AWSコンソールのCloudWatchダッシュボードを使用する。

次に、すべてのS3バケットを指定し、数値統計を追加して、ストレージサイズメトリックを表示できます。

これは十分なAPI呼び出しの費用がかからず、s3バケットのサイズによっては非常に高速になる可能性があります(非常に大きなバケットのサイズを取得するにはかなり時間がかかります)。

評決

ダッシュボードの作成(決議2各AWSアカウント上)が最も効率的なオプションだった私はのために私がログインし、各AWSが終了するスクリプトAPI呼び出しを待つよりも、アカウントから手動でメトリックをつかむすることが迅速な方法です起こします。:(


なんで| awk END'{print}'
Tensibai 2017年

1
再帰オプションを使用すると、すべてのフォルダーとファイルのサイズが表示され、バケットの合計サイズの出力のみが必要です。
カイルSteenkamp

ダッシュボードで何かを表示するには、「1日」以上の期間を選択する必要があります
Jeremy Leipzig

2
ダッシュボードの現時点でのコストはそれぞれ3ドルであるため、解決策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構成ファイルからこれを正規表現する時間がなかったので、以下に投稿したスクリプトの値をハードコード化しただけです
Kyle Steenkamp

2

私が見つけられないことを行うためのツールがない限り、これを行うためのスクリプトを作成する必要があります。

複数のawsアカウントを使用している場合は、バケットサイズを取得するためにアカウントを切り替える必要があります。

すべてのバケットとその合計サイズを取得するには、「aws s3api」を使用できます。を使用list-bucketsすると、1つのアカウントですべてのバケットを取得でき、サイズをリストして次のアカウントを試すことができます。


1
これを行うためにboto3を使用してPythonスクリプトを作成しました:gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c(注:CloudWatchのGetMetricStatisticsを使用して、バケット内のすべてのオブジェクトサイズを合計せずにバケットサイズを効率的にプルします)
Reid

1

バージョニングがオンになっていて、大量のデータが「削除」されている場合、これらのどれもバケットのサイズを示しません。S3 GUIコンソールの[Metrics]タブには、請求対象が表示されます。

/server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucketにあるスクリプトから次のコマンドをスクレイピングしました 。Windowsでうまく動作します。代用yourregionおよびyourbucketname

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

これにより、開始時間と終了時間によって制限された日数の平均サイズがバイト単位で示されます。 バケットでバージョニングが有効(アクティブ)になっていて大量のデータを「削除」したと思った場合、その結果はあなたに衝撃を与える可能性があります。

バージョニングが有効なバケットをクリーンアップするには、ライフサイクルルールを設定する必要があります。以前のバージョンを完全に削除することを選択できます。移行ステップでチェックボックスを省略できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.