【问题标题】:List s3 buckets with its size in csv format以 csv 格式列出 s3 存储桶及其大小
【发布时间】:2020-04-16 06:13:19
【问题描述】:

我正在尝试在 csv 中列出 s3 存储桶及其大小。

  • 存储桶名称大小
  • 存储桶 A 2 GB
  • B 桶 10 GB

正在寻找这样的东西......

我可以使用以下代码列出存储桶。

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)

谢谢

【问题讨论】:

  • 查看 S3 库存。也许这也适合您的用例。
  • CW 指标的用处不大,因为它对于 S3 每 24 小时只获取一个数据点。
  • 是的,我不想使用帖子中提到的 CW 指标...还有其他的吗?
  • 桶中有多少个对象?如果它很大(数万),我会推荐Amazon S3 Inventory,它可以提供一个桶中所有对象的每日 CSV 文件(包括它们的大小)。
  • @JohnRotenstein 我至少有 200 个存储桶,每个存储桶的大小从 1GB 到 4TB 不等,有多个对象...有没有办法可以将它添加到我的脚本中。因为我已经提取了存储桶的所有属性。我只想要 csv 中大小的新列。

标签: python amazon-web-services amazon-s3 boto3


【解决方案1】:

您可以使用list_objects()。 使用该列表对象,您可以使用选择器 response['Contents'][]['size'] 获取每个对象的键和大小,它保存对象的字节大小。

它的缺点是,如果存储桶中有太多对象,则可能需要时间进行迭代才能获得存储桶的总大小。

【讨论】:

  • 是的,我有带 TB 的桶……所以需要更长的时间……还有其他建议吗
  • 是多个小块的数据构成了TB吗?因为您仍然可以使用列出的对象,但会改变您将如何使用它;例如,您可以在一夜之间将脚本托管在一个实例中以收集这些数据
  • 参考我创建的这个脚本.. github.com/edcelvista/python-aws/blob/master/S3BucketScan.py – Edcel Cabrera Vista 15 秒前编辑删除
【解决方案2】:

这里有一些代码可以计算存储桶的大小。我已将它作为一个函数完成,因此您可以将其合并到您的代码中:

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 获得许可。)

【讨论】:

  • 谢谢你。让我把我的代码和你更新。
  • 它以字节为单位给出大小。刚刚测试了代码。我还没有与我的代码合并。在那之前,我们如何让它以 GB 而不是字节打印。谢谢
  • 除以 (1024 * 1024) 因为 1024 字节 = 1MB 和 1024MB = 1GB。
  • 谢谢你..当我单独尝试代码时,它会获取存储桶大小..但我想合并到 for 循环中以使其与其他属性一起列出..我已经更新了代码在帖子中。请检查。 “”“我在帖子中添加了for循环”。请帮助我将您的代码合并到该循环中”,因为我想一次获得多个存储桶。
  • 我已经简化了代码,因为我发现任何区域都可以用来计算桶大小。请注意,它现在返回 MB(四舍五入到零小数位)。除以 1024 得到 GB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-10
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2021-05-09
  • 2021-12-02
相关资源
最近更新 更多