如何使用Lambda查找AWS S3存储文件夹的总大小

时间:2017-12-19 20:09:48

标签: amazon-web-services amazon-s3 aws-lambda boto3

我正在尝试使用lambda查找AWS S3存储文件夹的总大小。目的是当我将一个对象上传到S3文件夹时,它将触发lambda,lambda将获取该文件夹的指标,并向我发送带有详细信息的SNS通知。我的问题是如何使用Lambda代码以及如何设置lambda来执行此操作。

所需操作和结果的CLI版本如下:

aws s3 ls --summarize --human-readable --recursive s3://ahmedfarghaly/moe

所需结果如下:

2017-12-18 21:35:58    0 Bytes moe/
    2017-12-18 21:36:40    6.4 MiB moe/xmen.mp4

    Total Objects: 2
       Total Size: 6.4 MiB

请帮忙

2 个答案:

答案 0 :(得分:1)

如果您使用的是python boto3,请使用list_objects API。可以找到详细信息here。它以字节为单位返回大小。示例代码:

import boto3
import os

def lambda_handler(event, context):
    client = boto3.client('s3', region_name=os.getenv('AWS_DEFAULT_REGION'))
    response = client.list_objects(
        Bucket='ahmedfarghaly',
        Marker='moe'
    )
    for content in response['Contents']:
        size = content['Size'] / 1024
        print str(size) + " KB"
    return 'Completed'

答案 1 :(得分:1)

在Lambda中导入Boto3后,下面的一个衬垫应该在默认区域中指定存储桶的大小。否则,在调用boto3 client时传递该区域。

bucket_size = sum(obj['Size'] for obj in boto3.client('s3').list_objects(Bucket='ahmedfarghaly')['Contents'])