複数のAWSアカウントがあり、アカウントごとにすべてのS3バケットをリストしてから、各バケットの合計サイズを表示する必要があります。
現在、私は単一のS3バケットのストレージサイズのみを表示できます。
aws s3 ls s3://mybucket --recursive --human-readable --summarize
複数のAWSアカウントがあり、アカウントごとにすべてのS3バケットをリストしてから、各バケットの合計サイズを表示する必要があります。
現在、私は単一のS3バケットのストレージサイズのみを表示できます。
aws s3 ls s3://mybucket --recursive --human-readable --summarize
回答:
決議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}'
?
[@]
して"${buckets[@]}"
意味ですか?
私の知る限り、これを実行するツールやCLI関数がないため、このデータを解析してクエリを実行するスクリプトを作成する必要があります。さいわい、CLIを使用してこのすべての情報を収集できます。
組織のすべてのアカウントを一覧表示して解析します。
aws organizations list-accounts
アカウントごとに、すべてのバケットをリストして解析します。
aws s3api list-buckets --query "Buckets[].Name"
最後に、各アカウント内の各バケットのサイズを取得します。以前と同じcliコマンドを使用できますが、バケット内の各アイテムの個々のサイズを一覧表示することに注意してください。このcliコマンドを使用してバケットサイズを取得することもできます。
aws s3api list-objects --bucket BUCKETNAME --output json --query "
[sum(Contents[].Size), length(Contents[])]"
私が見つけられないことを行うためのツールがない限り、これを行うためのスクリプトを作成する必要があります。
複数のawsアカウントを使用している場合は、バケットサイズを取得するためにアカウントを切り替える必要があります。
すべてのバケットとその合計サイズを取得するには、「aws s3api」を使用できます。を使用list-buckets
すると、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
これにより、開始時間と終了時間によって制限された日数の平均サイズがバイト単位で示されます。 バケットでバージョニングが有効(アクティブ)になっていて、大量のデータを「削除」したと思った場合、その結果はあなたに衝撃を与える可能性があります。
バージョニングが有効なバケットをクリーンアップするには、ライフサイクルルールを設定する必要があります。以前のバージョンを完全に削除することを選択できます。移行ステップでチェックボックスを省略できます。