我已经创建了一个SQS队列,现在我想从我的lambada函数中读取数据。我已经配置了从SQS到该lambada函数的触发器。
当我将消息放入SQS队列中时,它在Flight中显示1条消息。但是当我单击lambda函数中的test时,它会给我
错误
{
"errorMessage": "module initialization error"
}
我在boto3以下使用
import boto3
sqs = boto3.client('sqs')
queue_url = 'https://sqs.us-east-1.amazonaws.com/944198216610/My-Queue'
response = sqs.receive_message(
QueueUrl='https://sqs.us-east-1.amazonaws.com/944198216610/My-Queue',
AttributeNames=[
'SentTimestamp'],
MaxNumberOfMessages=1,
MessageAttributeNames=[
'All'
],
VisibilityTimeout=0,
WaitTimeSeconds=0
)
message = response['Messages'][0]
receipt_handle = message['ReceiptHandle']
# Delete received message from queue
sqs.delete_message(
QueueUrl='https://sqs.us-east-1.amazonaws.com/944198216610/My-Queue',
ReceiptHandle=receipt_handle
)
print('Received and deleted message: %s' % message)
答案 0 :(得分:0)
您的代码调用sqs.receive_message,但是要将Lambda与SQS正确集成,则可以使用Lambda事件触发器。这样,无论何时有事件进入队列,SQS都会自动使用该事件(或基于指定批处理大小的多个事件)调用您的Lambda函数。
See here for setting up an SQS Lambda event trigger
Also see here for setting up a Lambda handler in python,其中事件参数将是事件SQS触发您的lambda(打印它并查看事件的格式,以便您了解如何使用事件数据)。
这样,当您向SQS发送消息时,SQS将触发您的Lambda函数,如果您的Lambda成功返回,则SQS将从队列中删除该消息。您无需手动执行receive_message或delete_message。