是否可以在AWS S3中自动删除超过10分钟的对象?

时间:2016-12-01 07:23:37

标签: amazon-web-services amazon-s3

我们希望在创建对象后10分钟删除对象。目前有可能吗?

3 个答案:

答案 0 :(得分:2)

我有一个有效的解决方案,该解决方案是在AWS的Simple Queue ServiceAWS Lambda的帮助下无服务器构建的。这适用于在s3存储桶中创建的所有对象。

概述

在s3存储桶中创建任何对象时,存储桶会将带有对象详细信息的事件发送到配置了10分钟传递延迟的SQS队列。 SQS队列也是configured to trigger a Lambda function。 Lambda函数从发送的事件中读取对象详细信息,并从s3存储桶中删除该对象。涉及的所有三个组件(s3,SQS和Lambda)都是低成本的,松散耦合的,无服务器的,并且可以自动扩展到非常大的工作负载。

涉及的步骤

  1. 首先设置Lambda函数。在我的解决方案中,我使用了Python 3.7。该函数的代码为:

    import json
    import boto3
    
    def lambda_handler(event, context):
    
    for record in event['Records']:
        v = json.loads(record['body'])
        for rec in v["Records"]:
    
            bucketName = rec["s3"]["bucket"]["name"]
            objectKey = rec["s3"]["object"]["key"]
            #print("bucket is " + bucketName + " and object is " + objectKey )
    
            sss = boto3.resource("s3")
            obj = sss.Object(bucketName, objectKey)
            obj.delete()
    
    return {
        'statusCode': 200,
        'body': json.dumps('Delete Completed.')
    }
    

此代码和示例消息文件已上传到github repo

  1. 创建普通SQS队列。然后将SQS队列配置为具有10分钟的传递延迟。可以在“队列操作”->“配置队列”->“设置4”下找到该设置

enter image description here

  1. 配置SQS队列以触发您在步骤1中创建的Lambda函数。为此,请使用“队列操作”->“配置Lambda函数的触发器”。设置屏幕不言自明。如果您在步骤1中看不到Lambda函数,请正确地重做它,并确保使用相同的Region。

  2. 设置您的S3存储桶,以将事件触发到您在步骤2中创建的SQS队列。这在主存储桶屏幕上找到,单击“属性”选项卡,然后选择“事件”。单击加号以添加事件并填写以下表格:

enter image description here

要选择的重要点是选择All Object create events并选择您在步骤2中为该屏幕上一次下拉菜单创建的队列。

  1. 最后一步-向您的Lambda函数添加执行策略,以使其只能从特定的S3存储桶中删除。您可以通过Lambda功能控制台执行此操作。向下滚动控制台的Lambda功能屏幕,然后在Execution Role下对其进行配置。

这适用于我已复制到单个s3存储桶中的文件。该解决方案可以支持许多S3存储桶到1个队列和1个lambda。

答案 1 :(得分:0)

除了@taterhead提出的涉及SQS队列的详细解决方案之外,还可以考虑使用AWS Step Functions的以下无服务器解决方案:

它的优点是(1)没有15分钟的限制,(2)避免了由Lambda函数产生的连续队列轮询成本。

灵感:Schedule emails without polling a database using Step Functions

答案 2 :(得分:-2)

如果仍然有人对此感兴趣,那么S3现在提供了我一直在研究的生命周期规则,它们似乎很简单,可以在AWS S3控制台中进行配置。

S3存储桶的“管理”选项卡将显示一个标记为“添加生命周期规则”的按钮,用户可以在其中选择对象的特定前缀,还可以为要修改的存储桶中的对象的生命周期设置到期时间。

要获得更详细的解释,AWS已发布了有关此事的文章,其中对此进行了更详细的解释here