ดูถัง 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
ระวังว่าโซลูชันที่เสนอในการแก้ไข 2 จะเพิ่มค่าใช้จ่าย Cloudwatch ของคุณเนื่องจากแดชบอร์ดมีค่าใช้จ่าย $ 3 ในแต่ละครั้ง aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

อะไร[@]ใน"${buckets[@]}"ค่าเฉลี่ย?
Joe

3

คุณจะต้องเขียนสคริปต์ที่แยกวิเคราะห์และสืบค้นข้อมูลนี้เพราะเท่าที่ฉันทราบไม่มีเครื่องมือหรือฟังก์ชัน cli ที่ทำสิ่งนี้ โชคดีที่คุณสามารถรวบรวมข้อมูลทั้งหมดนี้ได้ด้วย CLI

  1. รายการและแยกบัญชีทั้งหมดในองค์กรของคุณ

    aws organizations list-accounts
    
  2. สำหรับแต่ละบัญชีให้ทำรายการและแยกถังทั้งหมด

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. สุดท้ายรับขนาดของแต่ละ bucket ภายในแต่ละบัญชี คุณสามารถใช้คำสั่ง cli แบบเดียวกับที่คุณเคยใช้ แต่ได้รับคำเตือนว่าคุณกำลังจะแสดงรายการขนาดแต่ละรายการของที่อยู่ในที่เก็บข้อมูล คุณยังสามารถใช้คำสั่ง cli นี้เพื่อรับขนาดที่ฝากข้อมูล

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

1
1. ไม่แสดงรายการข้อมูลโปรไฟล์ของบัญชี AWS ฉันไม่มีเวลา regex นี้จากไฟล์ aws config ที่เก็บข้อมูลนี้ดังนั้นฉันเพิ่ง hardcoded ค่าในสคริปต์ฉันโพสต์ด้านล่าง
Kyle Steenkamp

2

คุณจะต้องเขียนสคริปต์เพื่อทำสิ่งนี้เว้นแต่จะมีเครื่องมือที่ฉันไม่สามารถหาได้

หากคุณทำงานกับบัญชี aws หลายบัญชีคุณจะต้องสลับระหว่างบัญชีเพื่อให้ได้ขนาดที่ฝากข้อมูล

เพื่อให้ได้ถังทั้งหมดและขนาดโดยรวมคุณสามารถใช้ ' aws s3api ' การใช้list-bucketsคุณสามารถรับถังทั้งหมดในบัญชีเดียวจากนั้นคุณจะสามารถแสดงขนาดและลองใช้บัญชีถัดไป


1
ฉันเขียนสคริปต์ Python ที่มี boto3 เพื่อทำสิ่งนี้: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (หมายเหตุ: ใช้ GetMetricStatistics CloudWatch เพื่อดึงขนาดที่เก็บข้อมูลได้อย่างมีประสิทธิภาพ / โดยไม่รวมขนาดวัตถุทั้งหมดในที่ฝากข้อมูล
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

สิ่งนี้จะให้ขนาดเฉลี่ยเป็นไบต์ในช่วงเวลาที่กำหนดโดยเวลาเริ่มต้นและสิ้นสุด ผลลัพธ์อาจทำให้คุณตกใจหากที่เก็บข้อมูลของคุณมีการเปิดใช้งานการกำหนดเวอร์ชัน (ใช้งานอยู่) และคุณคิดว่าคุณได้ "ลบ" ข้อมูลจำนวนมากออกไป

หากต้องการล้างข้อมูลถังที่เปิดใช้งานการกำหนดรุ่นคุณต้องตั้งค่ากฎ LifeCycle คุณสามารถเลือกที่จะลบเวอร์ชันก่อนหน้าอย่างถาวร คุณอาจไม่ทำเครื่องหมายในช่องที่ขั้นตอนการเปลี่ยนภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.