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

AWS Lambda指标统计调用次数与实际调用次数不符问题咨询

现象原因分析

1. 参数调用错误触发重试

你当前使用位置参数传递invoke方法参数不符合boto3接口规范,invoke方法的位置参数顺序为FunctionName、InvocationType、LogType、ClientContext、Payload,你直接将payload放在第三个位置,会导致参数传值错误,Lambda服务端返回参数异常响应,进一步触发SDK重试逻辑。

2. boto3默认隐式重试机制

即便你未在Glue作业层面配置重试策略,boto3 SDK的Lambda客户端默认开启了自动重试逻辑,针对服务端5xx错误、限流429错误、网络超时、参数错误等场景会自动重试,默认标准模式下最多重试3次,加上原始请求刚好是4次调用,匹配你单次触发出现4次计数的现象。

3. Glue分布式执行重复运行代码

你配置了2个工作节点的Glue ETL作业,如果Lambda调用代码写在executor端运行的数据转换逻辑(如map、foreach算子)中,而非driver端的全局唯一逻辑,代码会随数据分区分配到多个工作节点并行执行,进一步放大调用次数,2次触发逻辑叠加每个请求3次重试就会出现16次的计数结果。


调用次数匹配说明

Lambda的Invocations指标统计的是所有成功到达Lambda服务端点的调用请求,不管是用户主动触发还是SDK、上层服务自动重试的请求,只要服务端完成接收就会计数,因此指标统计值和实际到达服务端的调用次数是完全对应的,你观测到的数值差本质是存在未被你感知的额外请求被发送到了Lambda。


修复建议

  • 修正Lambda调用的参数写法,改用关键字参数避免位置顺序错误:
lambda_response = lambda_client.invoke(
    FunctionName=target_lambda_arn,
    InvocationType='RequestResponse',
    Payload=json_payload
)
  • 显式配置boto3客户端的重试策略,关闭不必要的自动重试:
from botocore.config import Config

lambda_config = Config(
    retries = {
        'max_attempts': 1,
        'mode': 'standard'
    }
)
lambda_client = boto3.client('lambda', region_name='eu-west-1', config=lambda_config)
  • 调整Lambda调用代码的位置,确保仅在Glue作业的driver端执行一次,避免写入executor端的分布式处理逻辑中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:08