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