在 Lambda 中重新处理 DLQ 事件

2024-04-10

我有一个配置了 SQS DeadLetterQueue 的 AWS Lambda 函数“A”。当 Lambda 无法处理事件时,该事件会正确发送到 DLQ。有没有办法重新处理以 DLQ 结束的事件?

我找到了两种解决方案,但它们都有缺点:

  1. 创建一个新的 Lambda 函数“B”,该函数从 SQS 读取数据,然后将事件一一发送到之前的 Lambda“A”。 -> 这里我必须编写新代码并部署新函数
  2. 当事件到达 SQS 时再次触发 Lambda 'A' -> 这看起来很危险,因为我可能会导致循环执行

我理想的解决方案应该是使用 Lambda“A”按需重新处理丢弃的事件,而不是从头开始创建新的 Lambda“B”。有办法做到这一点吗?


最后,我没有从AWS找到任何解决方案来重新处理Lambda函数的DLQ事件。然后我创建了自己的自定义 Lambda 函数(我希望这对遇到相同问题的其他开发人员有所帮助):

import boto3

lamb = boto3.client('lambda')
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName='my_dlq_name')


def lambda_handler(event, context):
    for _ in range(100):
        messages_to_delete = []
        for message in queue.receive_messages(MaxNumberOfMessages=10):
            payload_bytes_array = bytes(message.body, encoding='utf8')
            # print(payload_bytes_array)
            lamb.invoke(
                FunctionName='my_lambda_name',
                InvocationType="Event",  # Event = Invoke the function asynchronously.
                Payload=payload_bytes_array
            )

            # Add message to delete
            messages_to_delete.append({
                'Id': message.message_id,
                'ReceiptHandle': message.receipt_handle
            })

        # If you don't receive any notifications the messages_to_delete list will be empty
        if len(messages_to_delete) == 0:
            break
        # Delete messages to remove them from SQS queue handle any errors
        else:
            deleted = queue.delete_messages(Entries=messages_to_delete)
            print(deleted)

部分代码的灵感来自这个帖子 https://stackoverflow.com/a/33156030/1531280

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Lambda 中重新处理 DLQ 事件 的相关文章

  • 如何通过id获取最近共享的AWS RDS快照?

    我在 AWS RDS 上有 2 个数据库 其中一个用于stage和一个用于production跨 2 个帐户 我正在尝试将数据复制到production to stage每 x 天 我的计划是复制最近的自动备份快照production并分享
  • API网关+Lambda+Python:处理异常

    我正在非代理模式下从 API Gateway 调用基于 Python 的 AWS Lambda 方法 我应该如何正确处理异常 以便使用部分异常设置适当的 HTTP 状态代码以及 JSON 正文 作为示例 我有以下处理程序 def my ha
  • 如何将 kubernetes LoadBalancer Ingress URL 发布到 aws Route53

    今天 当我通过 aws 使用 kubernetes 启动一个应用程序时 它公开了一个公开可见的 LoadBalancer Ingress URL 但是要将其链接到我的域以使公众可以访问该应用程序 我需要在每个设备上的浏览器中手动进入 aws
  • 如何在docker的keycloak中添加SSL

    我在将 SSL 证书添加到在 docker 上运行的 Keycloak 时遇到问题 我通过负载均衡器从 AWS EC2 获得了 SSL 证书 但不知道如何将其添加到 docker 上的 Keycloak 中 我正在通过谷歌搜索 但尚未找到任
  • API Gateway POST 方法在测试期间工作,但不适用于邮递员

    我会尽力清楚地解释我的问题 我有一个 API 它使用 Node js 编写的 lambda 函数在 DynamoDB 中编写一些内容 当我在 AWS 控制台中调用它时 API 按预期工作 我发送这样的正文 user id 4dz545zd
  • 从 EC2 W2008 实例创建 AMI - 为什么从来没有获得密码?

    我正在尝试做什么 我正在尝试克隆 EC2视窗2008通过管理控制台实例 该实例基于 Windows Server2008 i386 Base v104 ami 92ba43fb 但上面安装了许多应用程序 我想为新实例保留这些应用程序 发生了
  • 在 Elastic Beanstalk SSH 上运行 Django 命令 -> 缺少环境变量

    所以这对我来说是一个长期存在的问题 我很想解决它 我也认为这会帮助很多其他人 我希望在 Elastic Beanstalk EC2 实例上进行 ssh 操作后运行 Django 命令 例如 python manage py dumpdata
  • 使用 Terraform 管理访问 RDS 数据库的凭据时出现问题

    我通过 Terraform 创建了一个秘密 该秘密用于访问也在 Terraform 中定义的 RDS 数据库 并且在秘密中 我不想包含username and password 因此我创建了一个空密钥 然后在 AWS 控制台中手动添加凭证
  • 如何使用 AWS Glue 开始处理从 Web 服务终端节点提取的数据?

    更多源数据来自我需要定期轮询的 Web 服务端点 获得数据后 我可以使用 pyspark 执行传统的 ETL 并最终将数据写入 S3 和 Redshift 我不确定如何进行初始提取 甚至不确定我应该在 AWS Glue 文档中查找什么内容
  • 使用S3上传但不允许公共访问

    我的想法是创建一个 S3 存储桶以允许用户上传二进制对象 下一步是确认上传 然后 API 将启动文件处理 为了使其更安全 客户端将首先请求上传位置 然后 API 会在 S3 上为此上传分配并预先创建一个一次性使用目录 并在该目录上设置访问策
  • 带有 AWS S3 文件的 Icecast 服务器

    我目前正在运行 Icecast 服务器 用于在 EC2 实例上传输音频 目前我所有的 mp3 文件都存储在 EC2 实例上 我想将它们移动到 AWS S3 进行存储 到目前为止 我已经能够找到能够更新播放列表 https mediareal
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 如何使用具有自定义身份验证的 AWS cognito 创建临时 s3 上传安全令牌

    因此 我对 Cognito 的 Amazon 文档中有关其声明的用例之一的内容感到有点困惑 使用您自己的身份系统 允许您的应用程序将数据保存到 AWS 云 就我而言 我想给他们 aws 令牌 以便他们从移动客户端直接上传到 s3 而无需将我
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 如何从 AWS SAM 本地 docker 实例连接到主机 MySQL?

    我正在尝试使用调用我的 Lambda 函数sam local invoke但发现无法连接到我的主机MySQL 我尝试添加 docker network host但也无法连接 Traceback most recent call last F
  • 从 API 网关自定义授权方返回的 401 缺少“Access-Control-Allow-Origin”标头

    为了防止未登录的用户通过 AWS API Gateway 调用我的 lambda 函数 我使用自定义授权者 lambda 解决方案 如果请求被授权 200 并且我从被调用的 lambda 得到响应 一切正常并且我得到Access Contr
  • 将消息从 AWS Lambda 发布到 AWS IoT

    我正在尝试使用 Nodejs 将消息从 AWS Lamba 发布到 AWS IoT 我已压缩该项目并上传到 AWS IoT 下面是代码片段 var awsIot require aws iot device sdk var device a
  • AWS cognito 用户迁移池触发器不适用于登录流程

    我正在使用带有认知执行角色的 Lambda 函数进行 AWS 认知池迁移 以下是我的新池应用程序客户端设置 or AWS doc says 用户迁移身份验证流程 用户迁移 Lambda 触发器 允许从旧用户管理系统轻松迁移用户 进入您的用户
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部

随机推荐