【问题标题】:Boto3, AWS Lambda - Results compound each callBoto3,AWS Lambda - 结果复合每次调用
【发布时间】:2020-02-01 05:49:13
【问题描述】:

当我调用我的 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}

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

【问题讨论】:

    标签: python amazon-web-services aws-lambda boto3


    【解决方案1】:

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

    来自:

    # 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 函数拥有一切。我希望这可以帮助别人。我花了我试图写这个橡皮鸭问题来弄明白,但这是我宁愿不花的时间:)

    【讨论】:

    • 感谢@Bhargav Rao 的编辑!我会在以后的任何帖子中记住这一点!
    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多