ฉันมีบัญชี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
การใช้แดชบอร์ดในCloudWatchในคอนโซล AWS
จากนั้นคุณสามารถระบุที่เก็บ S3 ทั้งหมดและเพิ่มสถิติตัวเลขเพื่อแสดงเมทริกขนาดการจัดเก็บ
สิ่งนี้จะไม่เสียค่าใช้จ่ายสำหรับการโทร API ของคุณมากมายและสามารถทำงานได้เร็วขึ้นมากขึ้นอยู่กับขนาดของถัง s3 (ใช้เวลาสักครู่ในการรับขนาดถังที่มีขนาดใหญ่มาก)
คำตัดสิน
การสร้างแดชบอร์ด ( ความละเอียด 2 ) ในแต่ละบัญชี AWS เป็นตัวเลือกที่มีประสิทธิภาพที่สุดสำหรับฉันเพราะมันเร็วกว่าที่ฉันจะลงชื่อเข้าใช้และคว้าเมตริกด้วยตนเองจากแต่ละบัญชี AWS แทนที่จะรอให้สคริปต์ API โทรออกให้เสร็จ :(
| awk END'{print}'
?
[@]
ใน"${buckets[@]}"
ค่าเฉลี่ย?
คุณจะต้องเขียนสคริปต์ที่แยกวิเคราะห์และสืบค้นข้อมูลนี้เพราะเท่าที่ฉันทราบไม่มีเครื่องมือหรือฟังก์ชัน cli ที่ทำสิ่งนี้ โชคดีที่คุณสามารถรวบรวมข้อมูลทั้งหมดนี้ได้ด้วย CLI
รายการและแยกบัญชีทั้งหมดในองค์กรของคุณ
aws organizations list-accounts
สำหรับแต่ละบัญชีให้ทำรายการและแยกถังทั้งหมด
aws s3api list-buckets --query "Buckets[].Name"
สุดท้ายรับขนาดของแต่ละ bucket ภายในแต่ละบัญชี คุณสามารถใช้คำสั่ง cli แบบเดียวกับที่คุณเคยใช้ แต่ได้รับคำเตือนว่าคุณกำลังจะแสดงรายการขนาดแต่ละรายการของที่อยู่ในที่เก็บข้อมูล คุณยังสามารถใช้คำสั่ง cli นี้เพื่อรับขนาดที่ฝากข้อมูล
aws s3api list-objects --bucket BUCKETNAME --output json --query "
[sum(Contents[].Size), length(Contents[])]"
คุณจะต้องเขียนสคริปต์เพื่อทำสิ่งนี้เว้นแต่จะมีเครื่องมือที่ฉันไม่สามารถหาได้
หากคุณทำงานกับบัญชี aws หลายบัญชีคุณจะต้องสลับระหว่างบัญชีเพื่อให้ได้ขนาดที่ฝากข้อมูล
เพื่อให้ได้ถังทั้งหมดและขนาดโดยรวมคุณสามารถใช้ ' aws s3api ' การใช้list-buckets
คุณสามารถรับถังทั้งหมดในบัญชีเดียวจากนั้นคุณจะสามารถแสดงขนาดและลองใช้บัญชีถัดไป
สิ่งเหล่านี้ไม่แสดงขนาดของที่เก็บข้อมูลหากการเปิดใช้งานการกำหนดรุ่นและข้อมูลจำนวนมากถูก "ลบ" ในคอนโซล 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
สิ่งนี้จะให้ขนาดเฉลี่ยเป็นไบต์ในช่วงเวลาที่กำหนดโดยเวลาเริ่มต้นและสิ้นสุด ผลลัพธ์อาจทำให้คุณตกใจหากที่เก็บข้อมูลของคุณมีการเปิดใช้งานการกำหนดเวอร์ชัน (ใช้งานอยู่) และคุณคิดว่าคุณได้ "ลบ" ข้อมูลจำนวนมากออกไป
หากต้องการล้างข้อมูลถังที่เปิดใช้งานการกำหนดรุ่นคุณต้องตั้งค่ากฎ LifeCycle คุณสามารถเลือกที่จะลบเวอร์ชันก่อนหน้าอย่างถาวร คุณอาจไม่ทำเครื่องหมายในช่องที่ขั้นตอนการเปลี่ยนภาพ