Результат, возвращенный при выполнении функции Python AWS Lambda в "" Null "" - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть скрипт на python, который подключается к AWS MQ и собирает сообщения.Все мои соединения идеально выровнены и результат выполнения успешен.Но результат, возвращаемый выполнением моей функции, равен «null».Обновлены журналы ошибок: -

    {
  "errorType": "ConnectFailedException",
  "stackTrace": [
    "  File \"/var/task/one_purchasing.py\", line 21, in lambda_handler\n    conn.connect(login='test_mq', passcode='test_secure_mq',wait=True)\n",
    "  File \"/var/task/stomp/connect.py\", line 164, in connect\n    Protocol11.connect(self, *args, **kwargs)\n",
    "  File \"/var/task/stomp/protocol.py\", line 340, in connect\n    self.transport.wait_for_connection()\n",
    "  File \"/var/task/stomp/transport.py\", line 327, in wait_for_connection\n    raise exception.ConnectFailedException()\n"
  ]
}

Обновлена ​​лямбда-функция Python: -

import time
import boto3
import stomp
import json

kinesis_client = boto3.client('kinesis')


class Listener(stomp.ConnectionListener):
    def on_error(self, headers, message):
        print('received an error "%s"' % message)
        kinesis_client.put_record(
            StreamName='OnePurchasing',
            Data=u'{}\r\n'.format(message).encode('utf-8'),
            PartitionKey='0'
        )

    def on_message(self, headers, message):
        print('received a message "%s"' % message)
def lambda_handler(event, context):
    conn = stomp.Connection(host_and_ports=[('b-fa99d7c5-4714-4441-8166-47aae158281a-1.mq.eu-central-1.amazonaws.com', 61614)])
    lst = Listener()
    conn.set_listener('Listener', lst)
    conn.set_ssl(for_hosts=[('b-fa99d7c5-4714-4441-8166-47aae158281a-1.mq.eu-central-1.amazonaws.com', 61614)])
    conn.start()
    print('CONNECTION Started')
    conn.connect(login='test_mq', passcode='test_secure_mq',wait=True)
    print('CONNECTION established')
    conn.subscribe(destination='/queue/OnePurchasing', id=1, ack='auto')
    print('CONNECTION Subscribed')
    time.sleep(10)
    conn.disconnect()
    return

Может кто-нибудь сказать мне, как я могу отладить больше, чтобы получить сообщение от MQ

Снимок экрана сообщения MQ URL

Домашняя страница MQ

Сообщения в очереди

1 Ответ

0 голосов
/ 22 ноября 2018

Причина, по которой response равен null, заключается в том, что вы никогда не возвращаете значение, вы просто return.Это тот же ответ, как если бы вы запустили это:

def lambda_handler(event, context):
    return

Вы, вероятно, захотите что-то вернуть, как пример, встроенный в lambda:

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Что касается остальной части вашей проблемы,Похоже, вы никогда не получаете сообщение вообще.Из вы видите на веб-консоли вашего экземпляра MQ , есть ли сообщения в очереди, было ли получено сообщение и т. Д.

Все примеры, которые я видел, включают использованиеwait=True, например, conn.connect(wait=True), поэтому попробуйте добавить его в conn.connect, если только у вас нет веской причины, по которой вы его не используете.

Редактировать: Я проверял это, яне думайте, что вы когда-либо устанавливаете связь.Если вы добавите wait=True, вы, вероятно, увидите, что соединение с ConnectFailedException завершается неудачно, как у меня.Вероятно, это первое, что нужно отладить.

Редактировать 2: Я решил, вам нужно использовать SSL для подключения к экземпляру AWS MQ следующим образом:

conn = stomp.Connection(host_and_ports=[('b-4714-4441-8166-47aae158281a-1.mq.eu-central-1.amazonaws.com', 61614)])
lst = Listener()
conn.set_listener('Listener', lst)
conn.set_ssl(for_hosts=[('b-4714-4441-8166-47aae158281a-1.mq.eu-central-1.amazonaws.com', 61614)])
conn.start()
...