【问题标题】:How to iterate over S3 bucket objects and send messages to sqs如何迭代 S3 存储桶对象并将消息发送到 sqs
【发布时间】: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


【解决方案1】:

如果您需要将消息从 DLQ 移动到主队列,以便再次处理,您可以使用一些脚本来执行此操作,而无需涉及 S3。

https://github.com/garryyao/replay-aws-dlq - 这个很好用。

安装后,您需要运行

replay-aws-dlq [dlq_url] [main_queue_url]

这会将您的所有 DLQ 消息移动到主队列。

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2021-03-16
    • 2022-01-07
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多