【发布时间】:2021-05-07 22:59:02
【问题描述】:
我创建了一个函数,用于从 DLQ 获取 sqs 消息并将其放入 S3 存储桶中。现在我想创建一个函数或方法来重新驱动来自 S3 的消息。目前我正在尝试遍历对象找到新对象,然后触发它们被发送到 sqs 并从存储桶中删除。目前这就是我所拥有的。
import json
import boto3
def lambda_handler(bucket, event, context):
client = boto3.client('s3')
paginator = client.get_paginator('list_objects_v2')
page_iterator = paginator.paginate(Bucket=bucket)
for page in page_iterator:
if page['KeyCount'] > 0:
for item in page['Contents']:
yield item
for i in lambda_handler(bucket='dlqbucket'):
print (i)
【问题讨论】:
-
在删除对象时要小心循环对象列表。这可能会造成
list_objects()没有意识到分页调用之间对象数量发生变化的情况。这可以通过在进行任何删除之前检索整个对象列表来避免。 -
您的代码应该不调用
lambda_handler()——这是在调用 Lambda 函数时自动完成的。您应该将您的for循环放在lambda_handler()中,然后将您的迭代移动到一个函数中(但请参阅上面的我的 cmets,因此代码可能需要更改)。
标签: python json amazon-s3 aws-lambda boto3