es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer un mensaje SQS utilizando Lambda Python en AWS

He intentado leer un mensaje de la cola SQS utilizando el cliente boto en Lambda Python. Pero me enfrento a un problema con “errorMessage: ‘sqs.ServiceResource’ object has no attribute ‘receive_message'”, no pude encontrar la causa raíz. ¿Alguien puede ayudarme con esto?

Mi código en Lambda:

import json
import boto3
client = boto3.resource('sqs','us-west-2')
queue_url='https://sqs.us-west-2.amazonaws.com/050190852521/MyQueue'
def lambda_handler(event, context):

        response = client.receive_message(
            QueueUrl=queue_url,
            AttributeNames=['SentTimestamp'],
            MaxNumberOfMessages=1,
            MessageAttributeNames=['All'],
            VisibilityTimeout=0,
            WaitTimeSeconds=0
        )

        print('entered')
        print('Received %s' % message)

        message = response['Messages'][0]

        return {
            'statusCode': 200,
            'body': json.dumps('Hello from Lambda!')
        }

enter image description here

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el mensaje de error que recibiste se debe a que el recurso boto3 para SQS no tiene un método receive_message. En su lugar, debes crear un cliente de SQS utilizando boto3.client('sqs') y utilizar el método receive_message en el objeto del cliente. Aquí tienes una versión actualizada de tu código:

    import json
    import boto3
    
    cliente = boto3.client('sqs', region_name='us-west-2')
    queue_url = 'https://sqs.us-west-2.amazonaws.com/050190852521/MyQueue'
    
    def lambda_handler(event, context):
        response = cliente.receive_message(
            QueueUrl=queue_url,
            AttributeNames=['SentTimestamp'],
            MaxNumberOfMessages=1,
            MessageAttributeNames=['All'],
            VisibilityTimeout=0,
            WaitTimeSeconds=0
        )
    
        if 'Messages' not in response:
            print('No hay mensajes en la cola')
            return
    
        mensaje = response['Messages'][0]
        print('Recibido %s' % mensaje)
    
        return {
            'statusCode': 200,
            'body': json.dumps('¡Hola desde Lambda!')
        }
    

    Ten en cuenta que agregué el parámetro region_name al crear el cliente de SQS y agregué una verificación adicional para asegurarse de que haya mensajes en la respuesta antes de intentar acceder a ellos.

Comments are closed.