AWS lambada中的“模块初始化”

时间:2019-03-05 18:20:02

标签: amazon-web-services aws-lambda amazon-sqs

我已经创建了一个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)

1 个答案:

答案 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。