Список блоков s3 с его размером в формате csv - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь перечислить корзины s3 с их размером в CSV.

  • Размер имени корзины
  • Корзина A 2 ГБ
  • Корзина B 10 ГБ

В поисках чего-то подобного ...

Я могу перечислить ведра с кодом ниже.

def main():
    with open('size.csv', 'w') as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow([
            'Bucket Name',
            'Bucket Size'

        ])
        with open('accountroles.json') as ec2_file:
            ec2_data = json.load(ec2_file)
        region_list = ['us-west-1']
        for region in region_list:
            for index in range(len(ec2_data['Items'])):
                Account_Number = ec2_data['Items'][index]['Aws_Account_Number']
                Account_Name = ec2_data['Items'][index]['Acc_Name']
                ARN = ec2_data['Items'][index]['ARN']
                b = get_assume_arn_to_keys(Account_Number,Account_Name,ARN)
                #ds_client = boto3.client('s3',region_name=region,aws_access_key_id=``,aws_secret_access_key=``,aws_session_token=``)
                ds_client = boto3.client('s3',region_name=region,aws_access_key_id=b[1],aws_secret_access_key=b[2],aws_session_token=b[3])

                #s3_client = boto3.client('s3')

                bucket_list = ds_client.list_buckets()

                for bucket in bucket_list['Buckets']:
                    ************
                     ??????????
                    writer.writerow([
                        Account_Name,
                        #region,
                        bucket['Name'],
                        Bucketsize

                                   ])


main()

Я могу перечислить ведро. Пожалуйста, помогите мне, как приступить к получению размеров. Я упомянул несколько и, кажется, размер можно получить с помощью метрик CW. Есть ли способ.

Помогите мне по сценарию.

Редактировать / обновить:

                bucket_list = ds_client.list_buckets()

                for bucket in bucket_list['Buckets']:

                    try:
                        lifecycle = ds_client.get_bucket_lifecycle(Bucket=bucket['Name'])
                        rules = lifecycle['Rules']
                    except:
                        rules = 'No Policy'
                    try:
                        encryption = ds_client.get_bucket_encryption(Bucket=bucket['Name'])
                        Encryptiontype = encryption['ServerSideEncryptionConfiguration']['Rules']
                    except:
                        Encryptiontype = 'Not Encrypted'

                    print(bucket['Name'], rules, Encryptiontype)

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вот некоторый код, который вычислит размер корзины. Я сделал это как функцию, чтобы вы могли включить ее в свой код:

import boto3

def bucket_size(bucket):
    size = 0

    s3_client = boto3.client('s3')

    paginator = s3_client.get_paginator('list_objects_v2')
    page_iterator = paginator.paginate(Bucket = bucket)

    for page in page_iterator:
        for object in page['Contents']:
            size += object['Size']

    # Return size in MB (rounded)
    return size // 1024

# Call function
size = bucket_size('my-bucket')
print(size)

Я использовал итератор страницы на тот случай, если у вас в корзине более 1000 объектов.

(В дополнение к лицензии, предоставленной в соответствии с условиями обслуживания этого сайта, содержание этого сообщения лицензируется в соответствии с MIT-0.)

0 голосов
/ 14 апреля 2020

Вы можете использовать list_objects () . Используя этот список объектов, вы можете получить ключ и размер каждого объекта, используя ответ селектора ['Contents'] [] ['size'], который содержит размер объекта в байтах.

Недостатком является то, что если у вас слишком много объектов в корзине, может потребоваться время для итерации, чтобы получить общий размер корзины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...