繁体   English   中英

AWS Lambda python函数执行在““ Null””中返回的结果

[英]Result returned by AWS Lambda python function execution in “”Null“”

我有一个连接到AWS MQ并收集消息的python脚本。 我所有的连接都完美对齐,执行结果成功。 但是我的函数执行返回的结果为“ 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 Lambda函数:-

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主页

队列中的邮件

responsenull的原因是,您从不返回值,而只是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实例的Web控制台查看队列中是否有消息,是否已使用消息等等。

我看到的所有示例都涉及使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM