从 lambda 向 DLQ 发送消息时出错
Error when sending message from lambda to DLQ
我关注这篇文章是为了从 lambda 发送到 DLQ:
Using dead-letter queues in Amazon SQS — Boto3 documentation
代码如下
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 因为这个错误
[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
。
万一有人遇到同样的问题,客户端和资源之间存在差异,我想错误包含必要的信息,但根据这个
,我很难发现 AWS
response = client.set_queue_attributes(
QueueUrl='string',
Attributes={
'string': 'string'
}
)
您应该使用客户端
import boto3
client = boto3.client('sqs')
我的错误是我已经从 boto 获得了与 sqs 相关的东西
sqs = boto3.resource('sqs')
这就是错误的原因
[错误] AttributeError: 'sqs.ServiceResource' 对象没有属性 'set_queue_attributes'
因为我需要使用客户端而不是来自 sqs 的资源
我关注这篇文章是为了从 lambda 发送到 DLQ:
Using dead-letter queues in Amazon SQS — Boto3 documentation
代码如下
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 因为这个错误
[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
。
万一有人遇到同样的问题,客户端和资源之间存在差异,我想错误包含必要的信息,但根据这个
,我很难发现 AWSresponse = client.set_queue_attributes(
QueueUrl='string',
Attributes={
'string': 'string'
}
)
您应该使用客户端
import boto3
client = boto3.client('sqs')
我的错误是我已经从 boto 获得了与 sqs 相关的东西
sqs = boto3.resource('sqs')
这就是错误的原因 [错误] AttributeError: 'sqs.ServiceResource' 对象没有属性 'set_queue_attributes'
因为我需要使用客户端而不是来自 sqs 的资源