在Python中异步调用另一个lambda函数的并行调用Lambda函数

问题描述 投票:0回答:1

我有一个主lambda函数(比如说X),它异步调用另一个lambda函数(比如说Y)。一旦一个 lambda 函数 Y 的实例被触发并执行,它就会将数据转储到 kinesis 或 s3,然后是最后一个 lambda 函数(比如说 Z),它从 kinesis 或 s3 中获取数据作为输入并被触发。这就是整个流程过程,这个过程完全是事件驱动的。

现在,主函数(X)被触发,每次运行都有不同的输入。对于第一个lambda函数调用(Y),它会创建与主函数输入相同数量的实例,并为每个实例创建不同的AWS请求id。但是对于第二个从属lambda函数(Z),这并没有被创建。它只创建了一个aws请求id(这意味着这个过程不是异步的)。但是如果我给主lambda函数(X)分配一个20秒的等待时间,那么这个问题就不存在了。我使用Python 3.6来处理。

为什么会发生这种情况?这是一个已知的问题吗?有没有什么更好的方法来做同样的事情来实现完整的端到端流程?

这是我的主lambda函数(X)的代码。

def master_handler(event, context):
"""
Function to trigger slave code
"""
    client = boto3.client('lambda')
    aws_request_id = context.aws_request_id
    inputs = ['abc','def','ghi']
    for i in inputs:
        payload = {'current_input': '{}'.format(i),
                   'parent_aws_request_id': '{}'.format(aws_request_id)
                  }
        client.invoke(
            FunctionName=<slave function name>,
            InvocationType='Event',
            Payload=json.dumps(payload)
        )
        print(f"Trigger executed for {i}")
    print(f"Master function execution completed!")
python amazon-web-services aws-lambda amazon-sns serverless-framework-step-functions
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.