首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从lambda向DLQ发送消息时出错

从lambda向DLQ发送消息时出错
EN

Stack Overflow用户
提问于 2020-10-13 06:07:33
回答 1查看 150关注 0票数 0

我遵循这篇文章是为了将lambda发送到DLQ:

Using dead-letter queues in Amazon SQS — Boto3 documentation

代码如下

代码语言:javascript
复制
from datetime import datetime
import json
import os
import boto3
from botocore.vendored import requests

QUEUE_NAME = os.environ['QUEUE_NAME']
MAX_QUEUE_MESSAGES = os.environ['MAX_QUEUE_MESSAGES']
dead_letter_queue_arn = os.environ['DEAD_LETTER_QUEUE_ARN']
sqs = boto3.resource('sqs')
queue_url = os.environ['SQS_QUEUE_URL']

redrive_policy = {
    'deadLetterTargetArn': dead_letter_queue_arn,
    'maxReceiveCount': '10'
}


def lambda_handler(event, context):

    # Receive messages from SQS queue
    queue = sqs.get_queue_by_name(QueueName=QUEUE_NAME)
    response = requests.post("http://httpbin.org/status/500", timeout=10)
    if response.status_code == 500:
        sqs.set_queue_attributes(QueueUrl=queue_url,
                                 Attributes={
                                    'RedrivePolicy': json.dumps(redrive_policy)
                                    }
                                )

我这样做是因为我需要实现指数退避,但我甚至不能发送到DLQ,因为这个错误

代码语言:javascript
复制
[ERROR] AttributeError: 'sqs.ServiceResource' object has no attribute 'set_queue_attributes'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 24, in lambda_handler
    sqs.set_queue_attributes(QueueUrl=queue_url,

根据set_queue_attributes()文档,该对象具有属性set_queue_attributes

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 10:53:35

好吧,如果任何人有同样的问题,客户端和资源之间是不同的,我认为错误有必要的信息,但对于我来说,很难发现AWS,根据这一点

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs.html#SQS.Client.set_queue_attributes

代码语言:javascript
复制
response = client.set_queue_attributes(
    QueueUrl='string',
    Attributes={
        'string': 'string'
    }
)

您应该使用客户端

代码语言:javascript
复制
import boto3

client = boto3.client('sqs')

我的错误是我已经有了一些来自boto的与sqs相关的东西

代码语言:javascript
复制
sqs = boto3.resource('sqs')

这就是错误AttributeError:'sqs.ServiceResource‘对象没有'set_queue_attributes’属性的原因

因为我需要使用客户端而不是来自sqs的资源

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64325934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档