Python Lambda执行无报错但Elasticsearch索引未创建问题排查
问题排查与解决方案
核心问题定位
从日志显示Lambda函数执行到ES操作时触发了3秒超时强制终止,因此ES索引创建、数据写入请求均未执行完成,导致Elasticsearch侧无对应索引生成。
具体排查点与解决方法
- 调整Lambda执行超时时间
默认Lambda函数的执行超时阈值为3秒,ES的网络连接、数据写入本身存在一定耗时,很容易超出默认时长。解决方案:在Lambda控制台将函数的超时时间调整为10~30秒,给ES操作预留足够的执行窗口。 - 核验网络连通性
你使用的ES地址`192.168.21.150为内网地址,需确认以下配置:- Lambda是否和ES集群部署在同一个VPC下
- Lambda关联的安全组已开放了到ES集群8200端口的出方向访问权限
- 若跨VPC部署,需为Lambda配置NAT网关确保可以访问ES所在的内网资源
- 优化ES客户端配置
当前代码未给ES客户端配置超时规则,默认连接超时时间过长容易卡住执行阻塞到Lambda超时,修改ES初始化代码添加超时、重试规则:
es = Elasticsearch( ["192.168.21.150"], port=8200, connection_class = RequestsHttpConnection, timeout=10, max_retries=3, retry_on_timeout=True )
- 补充异常捕获逻辑
当前代码未捕获ES操作的报错,无法定位不了具体报错原因,添加异常捕获打印错误信息:
try: es.indices.create(index=logstashIndex, ignore=400) id1 = uuid.uuid4() print(id1) es.index(index=logstashIndex, id=str(id1), body=myload) print("Successly Created - Index: {}".format(logstashIndex)) except Exception as e: print(f"ES操作错误信息:{str(e)}") raise e
排查顺序建议
先调整Lambda超时时间到10秒以上验证是否还出现超时问题,如果依旧超时优先排查网络连通性,可在Lambda中添加端口连通性测试代码,确认Lambda环境是否能正常访问ES的8200端口。
内容的提问来源于stack exchange,提问作者Jaydeep Chaudhari
相关产品推荐
相关产品推荐

