【问题标题】:How to find the total size of AWS S3 storage folder using Lambda如何使用 Lambda 查找 AWS S3 存储文件夹的总大小
【发布时间】:2023-03-12 17:32:01
【问题描述】:

我正在尝试使用 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

请帮忙

【问题讨论】:

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


    【解决方案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'
    

    【讨论】:

    • 所以为了通过 sns 将结果发送到我只需添加这部分:import json import boto3 message = {"foo": "bar"} client = boto3.client('sns') response = client.publish( TargetArn=arn, Message=json.dumps({'default': json.dumps(message)}), MessageStructure='json' )
    • 是的。应该这样做。
    【解决方案2】:

    在 Lambda 中导入 Boto3 后,以下一行应给出默认区域中存储桶的大小。否则,调用boto3客户端时传递区域。

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

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 2015-11-18
      • 2018-09-20
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      相关资源
      最近更新 更多