AWS Lambda函数A调用函数B本地正常云端超时问题求助
问题现象
- 本地通过SAM命令
sam local invoke functionA > response.json调用函数A时,能正常触发函数B执行 - 云端部署后,以下三种调用方式均出现超时:
- 本地终端执行AWS CLI命令:
aws lambda invoke --function-name functionA --cli-binary-format raw-in-base64-out response.json,返回超时错误:{"errorMessage":"2025-03-31T23:12:09.503Z\naa35bxxx-734x-4b3x-94cb-xxxxxxxxxxx Task timed out after 20.02\nseconds"},控制台显示Read timeout on endpoint URL: "https://lambda.ap-southeast-2.amazonaws.com/2015-03-31/functions/functionA/invocations" - AWS控制台直接调用函数A
- EventBridge调度器调用函数A
- 本地终端执行AWS CLI命令:
- 已在
template.yaml中将函数A的Timeout设置为1000秒,问题依旧
解决方案线索
1. 修复Lambda调用代码的参数错误
检查代码中的参数名:你当前代码里写的是yieldFunctionName,这是笔误,正确的参数应该是FunctionName。这个错误会导致函数A调用Lambda API时请求无效,卡在等待响应阶段最终超时。修正后的代码:
response_lambda = lambda_client.invoke( FunctionName='arn:aws:lambda:ap-southeast-2:XXXXXXXXXXX:function:functionB', InvocationType='Event', # 异步调用 Payload=payload_bytes )
2. 排查VPC内的Lambda网络访问能力
即使函数A和B处于同一VPC,VPC内的Lambda默认无法直接访问Lambda服务API,需要配置以下任一种网络方案:
- 配置Lambda VPC接口端点:在VPC中创建
com.amazonaws.ap-southeast-2.lambda类型的接口端点,确保函数A所在的子网和安全组允许访问该端点。这样函数A可以通过VPC内部网络调用Lambda API,无需公网访问。 - 配置NAT网关/实例:如果不使用VPC端点,确保函数A所在的子网关联了带有NAT网关的路由表,且安全组允许出站访问HTTPS(443端口),让函数A能通过公网访问Lambda服务API。
3. 验证函数A的IAM执行角色权限
确认函数A的IAM执行角色拥有lambda:InvokeFunction权限,目标资源为函数B的ARN。示例权限策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:ap-southeast-2:XXXXXXXXXXX:function:functionB" } ] }
4. 检查函数B的状态与日志
- 确认函数B已正常部署到云端,配置(如超时、内存)无错误
- 查看函数B的CloudWatch日志:如果日志中没有调用记录,说明函数A根本没成功发起调用;如果有调用记录但报错,需排查函数B自身的问题
5. 查看函数A的CloudWatch日志
通过CloudWatch日志定位函数A的具体卡住阶段:
- 如果日志显示调用Lambda API时出现连接超时/DNS解析失败,指向网络配置问题
- 如果日志显示权限错误,需调整IAM角色权限
内容的提问来源于stack exchange,提问作者Bill Kary
相关产品推荐
相关产品推荐

