我有一个主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!")