You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS Lambda Function1的输出数组完整传递至Function2?

解决Lambda函数间传递数组的问题

看起来你遇到的问题是Function2没有接收到Function1传递的完整数组,反而只拿到了单个元素。这主要是因为Function1传递Payload的方式和Function2解析event的逻辑不匹配,下面给你两种可行的解决办法:

方案一:包装数组为字典传递(推荐)

Lambda函数之间传递数据时,更规范的做法是把数组包装在一个字典中,这样可以避免解析时的歧义,也方便后续扩展参数。

修改Function1的代码

把inputForInvoker数组放到一个字典的键下,比如sql_files:

for each in contents:
    print(each["Key"])
    inputForInvoker.append({'SQLFilename': each["Key"]})
# 把数组包装到字典里
payload_data = {'sql_files': inputForInvoker}
response = lambdac.invoke(
    FunctionName='arn:aws:lambda:eu-west-2:169697352176:function:pyodbc',
    InvocationType='RequestResponse',
    Payload=json.dumps(payload_data)
)

修改Function2的代码

现在可以从event中取出完整的数组,然后遍历处理每个元素:

def lambda_handler(event, context):
    # 获取完整的SQL文件数组
    sql_files = event['sql_files']
    # 遍历数组处理每个文件名
    for file_item in sql_files:
        sqlFileName = file_item['SQLFilename']
        print(sqlFileName)

方案二:直接处理传入的数组(不修改Function1)

如果你不想改动Function1的传递逻辑,那Function2需要直接把event当作数组来处理,因为你当前传递的Payload就是一个JSON数组:

def lambda_handler(event, context):
    # event本身就是Function1传递的数组
    for file_item in event:
        sqlFileName = file_item['SQLFilename']
        print(sqlFileName)

为什么之前只拿到单个元素?

你提到Function2当前输出是{'SQLFilename': 'body_aus.sql'},这可能是因为你误将数组的第一个元素当成了整个event,或者在测试时传递了单个元素。实际上,当你直接传递数组作为Payload时,Function2的event参数会是完整的数组,而不是单个元素——你的原Function2代码event['SQLFileName']理论上会抛出KeyError(因为列表不能用字符串索引),所以应该是测试过程中出现了偏差。

内容的提问来源于stack exchange,提问作者Alla Sasikanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:42:45