首页 > 解决方案 > Boto3,AWS Lambda - 结果复合每次调用

问题描述

当我调用我的 Lambda 函数时,结果似乎相互叠加。我得到的每一个响应都是从函数实例化开始的一切,再加上新的值。

有没有办法刷新这个,或者至少有办法弄清楚新的回报是什么?我不确定这是否是预期的行为,或者是否打算如何正确过滤它(或者我正在做一些非常错误的事情)。


ACCESS_KEY = 'xxxxx'
SECRET_KEY = 'xxxxx'

lambda_client = boto3.client('lambda', 
                              region_name='xxxxx',
                              aws_access_key_id=ACCESS_KEY,
                              aws_secret_access_key=SECRET_KEY,)

test_event = {'firstname' : 'mark'}

def invoke_lambda(test_event):
    r = lambda_client.invoke( 
        FunctionName='Python3MySQLEndpoint',
        InvocationType='RequestResponse',
        Payload=json.dumps(test_event)
    )

    p = r['Payload']
    return p

data = invoke_lambda(test_event)
print data

结果(7次运行):

{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'xxxxx@gmail.com', u'firstname': u'mark'}, u'employee_id': 1}
{u'employee_info': {u'lastname': u'xxxxx', u'email': u'asdlkfjasldkfjlasdk@laskjfdlkdas.com', u'firstname': u'mark'}, u'employee_id': 3}

我的意图是让它只返回符合硬编码查询的两条记录。

标签: pythonamazon-web-servicesaws-lambdaboto3

解决方案


它与此调用中的代码无关。我不得不将列表从处理函数(全局)外部删除到处理函数中。

从:

# array to store values to be returned
records = []

# executes upon API event
def handler(event, context):
    ...
    records.append(record)

在上面,该函数继续附加到一个不断增长的列表中。

至:

# executes upon API event
def handler(event, context):
    # array to store values to be returned
    records = []
    ...
    records.append(record)

每次调用该函数时,该列表都会被擦除并重新启动。

似乎 Lambda 函数拥有一切。我希望这可以帮助别人。我花了我试图写这个橡皮鸭问题来弄清楚,但这是我宁愿不花的时间:)


推荐阅读