«инициализация модуля» в AWS lambada

#amazon-web-services #aws-lambda #amazon-sqs

#amazon-веб-сервисы #aws-lambda #amazon-sqs

Вопрос:

Я создал очередь SQS, и теперь я хочу прочитать данные из моей функции lambada.Я настроил триггер из SQS для этой функции lambada.

Когда я помещаю сообщение в очередь SQS, оно показывает мне, что 1 сообщение находится в процессе выполнения.Но когда я нажимаю test в функции lambda, это выдает мне

Ошибка

   {
       "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. Если вы нажмете «проверить» в консоли, то вы ничего не получите из очереди, а вместо этого отправите ей тестовое событие. Видите ли вы какую-либо ошибку в журналах CloudWatch для lambda из события SQS (не тестового события)? Кроме того, вам следует отредактировать такую информацию, как номер вашей учетной записи.

2. У вас должна быть дополнительная информация в разделе «Вывод журнала»

3. Привет, я интегрировал свой SQS с lambada. Итак, когда я отправляю сообщение в SQS, я получаю эту ошибку. ошибка инициализации модуля: «Сообщения»

Ответ №1:

Ваш код вызывает sqs.receive_message, однако для правильной интеграции Lambda с SQS вы можете использовать триггеры событий Lambda. Таким образом, всякий раз, когда событие попадает в очередь, SQS автоматически вызовет вашу лямбда-функцию с этим событием (или несколькими событиями в зависимости от указанного размера пакета).

Смотрите здесь, как настроить триггер события SQS Lambda

Также смотрите Здесь, как настроить обработчик лямбда-кода в python, где параметром события будет событие, с помощью которого SQS запускает ваш лямбда-код (распечатайте его и посмотрите формат события, чтобы вы могли получить представление о том, как использовать данные события).

Таким образом, когда вы отправляете сообщение в SQS, SQS запускает вашу лямбда-функцию, и если ваш лямбда-код возвращается успешно, SQS удаляет сообщение из очереди. Вам не нужно выполнять receive_message или delete_message вручную.

Комментарии:

1. Привет, Дейв, спасибо за твой ответ. Я понял вашу точку зрения использовать метод lambada_handler и затем получать данные в событии. Но просто интересно, что не так с приведенным выше кодом, он также должен работать правильно? Буду признателен, если вы сможете помочь мне разобраться.

2. Всегда пожалуйста. Ваша основная логика действительно выглядит нормально, однако Lambda ищет модуль-обработчик всякий раз, когда он запускается, который включает в себя тестовые триггеры через консоль, и, скорее всего, именно поэтому вы получили «ошибку инициализации модуля». Итак, теоретически, если вы поместите этот код внутрь lambda_handler, как описано в документах, он должен работать, однако лучше всего использовать встроенные триггеры, как упоминалось ранее, и позволить aws управлять очередью, что доставит вам меньше хлопот. Удачи!