Результат, возвращенный при выполнении функции Python AWS Lambda в ""Null""
У меня есть скрипт на 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
1 ответ
Причина того, что 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()