我们希望在创建对象后10分钟删除对象。目前有可能吗?
答案 0 :(得分:2)
我有一个有效的解决方案,该解决方案是在AWS的Simple Queue Service和AWS Lambda的帮助下无服务器构建的。这适用于在s3存储桶中创建的所有对象。
在s3存储桶中创建任何对象时,存储桶会将带有对象详细信息的事件发送到配置了10分钟传递延迟的SQS队列。 SQS队列也是configured to trigger a Lambda function。 Lambda函数从发送的事件中读取对象详细信息,并从s3存储桶中删除该对象。涉及的所有三个组件(s3,SQS和Lambda)都是低成本的,松散耦合的,无服务器的,并且可以自动扩展到非常大的工作负载。
首先设置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。
配置SQS队列以触发您在步骤1中创建的Lambda函数。为此,请使用“队列操作”->“配置Lambda函数的触发器”。设置屏幕不言自明。如果您在步骤1中看不到Lambda函数,请正确地重做它,并确保使用相同的Region。
设置您的S3存储桶,以将事件触发到您在步骤2中创建的SQS队列。这在主存储桶屏幕上找到,单击“属性”选项卡,然后选择“事件”。单击加号以添加事件并填写以下表格:
要选择的重要点是选择All Object create events
并选择您在步骤2中为该屏幕上一次下拉菜单创建的队列。
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。