Xem tất cả các thùng AWS S3 và liệt kê từng bộ lưu trữ xô được sử dụng


11

Tôi có nhiều tài khoản AWS và tôi cần liệt kê tất cả các thùng S3 trên mỗi tài khoản và sau đó xem tổng kích thước của từng nhóm.

Hiện tại, tôi chỉ có thể xem kích thước lưu trữ của một nhóm S3 duy nhất với:

aws s3 ls s3://mybucket --recursive --human-readable --summarize

S3 Chọn đã được phát hành vài ngày trước trong re:
Invent

Bạn có thể muốn thử mã này tôi đã viết để đạt được điều tương tự: github.com/insperitas/s3-data
jimmy978654321

Câu trả lời:


11

Nghị quyết 1

Vì vậy, tôi đã giải quyết điều này với kịch bản sau đây. Ban đầu tôi chỉ đăng câu hỏi trong trường hợp có một cách dễ dàng hơn mà tôi không biết.

#!/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

Nghị quyết 2

Sử dụng Bảng điều khiển trong CloudWatch trong bảng điều khiển AWS.

Sau đó, bạn có thể chỉ định tất cả các nhóm S3 và thêm số liệu thống kê số để hiển thị số liệu kích thước lưu trữ.

Điều này sẽ không làm bạn tốn nhiều cuộc gọi API và có thể nhanh hơn đáng kể tùy thuộc vào kích thước của các thùng s3 (mất khá nhiều thời gian để có được kích thước trên các thùng rất lớn).

Bản án

Tạo Bảng điều khiển ( Độ phân giải 2 ) trên mỗi tài khoản AWS là tùy chọn hiệu quả nhất đối với tôi vì tôi nhanh chóng đăng nhập và lấy số liệu theo cách thủ công từ mỗi tài khoản AWS hơn là chờ các lệnh gọi API của kịch bản kết thúc. :


Tại sao | awk END'{print}'?
Tensibai

1
Sử dụng tùy chọn đệ quy cho thấy kích thước của mỗi thư mục và tệp và tôi chỉ cần đầu ra của tổng kích thước của nhóm.
Kyle Steenkamp

Bạn cần chọn thời gian '1 ngày' hoặc lớn hơn để bảng điều khiển hiển thị mọi thứ
Jeremy Leipzig

2
Xin lưu ý rằng giải pháp được đề xuất trong Độ phân giải 2 làm tăng chi phí Cloudwatch của bạn vì bảng điều khiển có chi phí 3 đô la mỗi lần tại thời điểm này. aws.amazon.com/cloudwatch/pricing/?nc1=h_ls
Drubio

[@]trong "${buckets[@]}"bình?
Joe

3

Bạn sẽ cần phải viết một tập lệnh phân tích cú pháp và truy vấn dữ liệu này vì theo như tôi biết, không có một công cụ hay hàm cli nào thực hiện việc này. May mắn thay, bạn có thể thu thập tất cả các thông tin này với CLI.

  1. Liệt kê và phân tích tất cả các tài khoản trong tổ chức của bạn.

    aws organizations list-accounts
    
  2. Đối với mỗi tài khoản, hãy liệt kê và phân tích tất cả các nhóm.

    aws s3api list-buckets --query "Buckets[].Name"
    
  3. Cuối cùng, lấy kích thước của mỗi thùng trong mỗi tài khoản. Bạn có thể sử dụng cùng một lệnh cli trước đây, nhưng được cảnh báo rằng bạn sẽ liệt kê kích thước riêng của từng mục trong nhóm. Bạn cũng có thể sử dụng lệnh cli này để lấy kích thước thùng.

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

1
1. không liệt kê thông tin hồ sơ của tài khoản AWS. Tôi không có thời gian để lấy lại dữ liệu này từ tệp cấu hình aws nơi lưu trữ thông tin này vì vậy tôi chỉ mã hóa các giá trị trong tập lệnh tôi đã đăng bên dưới
Kyle Steenkamp

2

Bạn sẽ phải viết một kịch bản để làm điều này trừ khi có một công cụ để làm nó mà tôi không thể tìm thấy.

Nếu bạn đang làm việc với nhiều tài khoản aws, bạn sẽ cần phải chuyển đổi giữa các tài khoản để có được kích thước nhóm.

Để có được tất cả các thùng và tổng kích thước của chúng, bạn có thể sử dụng ' aws s3api '. Sử dụng list-bucketsbạn có thể nhận được tất cả các nhóm trong một tài khoản và sau đó bạn sẽ có thể liệt kê kích thước của chúng và thử tài khoản tiếp theo.


1
Tôi đã viết một kịch bản Python với boto3 để làm điều này: gist.github.com/rwiggins/b945b5ec1693c1d473a814915adcee8c (lưu ý: sử dụng GetMetricStatistics CloudWatch để kéo xô kích thước một cách hiệu quả / không tổng hợp tất cả các kích thước đối tượng trong một cái xô)
Reid

1

Không ai trong số này hiển thị kích thước của thùng nếu Phiên bản được bật và lượng dữ liệu khổng lồ đã bị "xóa". Trong bảng điều khiển GUI S3, tab Số liệu hiển thị những gì bạn đang được lập hóa đơn.

Đã loại bỏ lệnh sau khỏi tập lệnh được tìm thấy tại /server/84815/how-can-i-get-the-size-of-an-amazon-s3-bucket . Nó hoạt động tốt trên Windows. Thay thế yourregionyourbucketname:

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

Điều này cho kích thước trung bình tính bằng byte qua các ngày giới hạn bởi thời gian bắt đầu và kết thúc. Kết quả có thể gây sốc cho bạn nếu nhóm của bạn đã bật Phiên bản (kích hoạt) bạn nghĩ rằng mình đã "xóa" lượng dữ liệu khổng lồ.

Để dọn sạch các thùng hỗ trợ Phiên bản, bạn phải đặt quy tắc Vòng đời. Bạn có thể chọn xóa vĩnh viễn các Phiên bản trước. Bạn có thể bỏ qua các hộp kiểm ở bước Chuyển tiếp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.