1

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

现在,每次运行都会使用不同的输入触发主功能 (X)。对于第一个 lambda 函数调用 (Y),它会创建与 master 的输入一样多的实例数,并为每个实例创建不同的 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!")
4

0 回答 0