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

如何构造Lambda调用负载以调用另一Lambda代理函数?

解决方案

核心原因

API Gateway触发Lambda A时,会将请求的JSON字符串存入event['body'],所以A中json.loads(event['body'])能正常工作。但从Lambda B调用A时,你传递的lambda_payload被json.dumps序列化为JSON字符串后,Lambda服务会自动将其反序列化为字典传给A的event参数——这就导致A收到的event['body']是一个字典而非字符串,自然触发TypeError。

不修改A的解决方法(推荐)

在B中,将lambda_payload里的body先序列化为JSON字符串,再整体转成JSON传给A。这样A收到的event['body']就和API Gateway触发时的格式一致了。

修改后的B代码:

import json
import boto3

lambda_client = boto3.client('lambda')

def lambda_handler(event, context):
    # 先把body内容转成JSON字符串
    body_content = json.dumps({'user_id': 2, 'payload': {'name': "James", 'age': 35}})
    
    lambda_payload = {
        'headers': {},
        'response': False,
        'queryStringParameters': {},
        'body': body_content
    }
    
    lambda_client.invoke(
        FunctionName='A', 
        InvocationType='RequestResponse',
        Payload=json.dumps(lambda_payload)
    )

若必须修改A的备选方案

如果无法调整B的代码,可以在A中增加类型判断,兼容两种输入格式:

import json

def lambda_handler(event, context):   
    body = event['body']
    # 如果是字典直接用,是字符串就解析
    if isinstance(body, dict):
        parsed_body = body
    else:
        parsed_body = json.loads(body)
    # 后续用parsed_body处理业务逻辑
    ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:35:26