我正在尝试使用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
请帮忙
答案 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'])