是否可以在AWS S3中将对象到期时间设置为10分钟?

Onk*_*ngh 8 amazon-s3 amazon-web-services

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

Tat*_*ead 7

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

概述

当在您的 s3 存储桶中创建任何对象时,存储桶会将包含对象详细信息的事件发送到配置了 10 分钟交付延迟的 SQS 队列。SQS 队列还配置为触发 Lambda 函数。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.')
    }
    
    Run Code Online (Sandbox Code Playgroud)

此代码和示例消息文件已上传到github 存储库

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

在此处输入图片说明

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

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

在此处输入图片说明

要选择的要点是选择All Object create events并选择您在步骤 2 中为该屏幕上的最后一个下拉列表创建的队列。

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

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