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

S3上传无法触发AWS Lambda导致Kibana无数据问题求助

排查S3触发Lambda失效的实操方案

我之前搭建类似数据流时也碰到过一模一样的问题,结合你的场景,给你梳理几个核心排查步骤,一步步定位问题:

1. 先确认S3事件通知配置是否正确

  • 检查存储桶的事件类型:Kinesis Firehose是通过PutObject写入S3的,所以你得确保事件通知选了All object create events,或者至少勾选了Put操作,别漏选了触发类型。
  • 核对目标Lambda:确认事件通知的目标是你用来转发数据的那个Lambda函数,ARN别填错,也别不小心选成了其他函数。
  • 过滤规则检查:如果Firehose写入的文件有特定前缀(比如twitter-data/)或后缀(比如.json.gz),你的事件通知过滤规则要完全匹配,不然S3会忽略这些文件的触发请求。

2. 验证Lambda的权限配置

  • 检查Lambda的资源策略:必须允许S3调用这个函数,你可以在Lambda控制台的「配置」→「权限」→「资源策略」里查看,确保有类似这样的语句:
{
  "Version": "2012-10-17",
  "Id": "S3InvokeLambdaPolicy",
  "Statement": [
    {
      "Sid": "AllowS3Trigger",
      "Effect": "Allow",
      "Principal": {
        "Service": "s3.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:你的区域:账号ID:function:你的Lambda函数名",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:s3:::你的S3存储桶名"
        }
      }
    }
  ]
}
  • 确认Lambda执行角色权限:这个角色需要能读取S3里的文件(因为要把Firehose写入的数据拿出来转发到ES),所以权限里必须包含s3:GetObject和s3:GetObjectVersion这两个动作。

3. 用CloudWatch日志找线索

  • 先看Lambda的日志组:如果S3触发了Lambda,哪怕函数执行失败,CloudWatch里也会有日志记录。如果完全没有日志,说明S3根本没触发Lambda;如果有日志,直接看里面的错误信息(比如权限不足、数据解析失败等)。
  • 再查S3的访问日志:确认Firehose确实在往桶里写文件,同时看看有没有触发事件的相关记录,排除Firehose写入异常的可能。

4. 检查Firehose的缓冲配置

  • Firehose默认的缓冲时间是15分钟,如果你的测试数据量不大,可能要等很久才会生成一个文件触发Lambda。可以临时把缓冲时间调小(比如1分钟),测试是否能快速触发Lambda,验证流程是否通顺。
  • 核对Firehose的文件路径:如果Firehose写的文件带时间前缀(比如year=2024/month=05/...),要确保S3事件通知的前缀过滤规则能匹配上这个路径,不然也不会触发。

5. 手动触发Lambda做测试

  • 从Lambda控制台的「测试」功能里,选「S3 Put」模板,修改桶名和对象键为你S3里实际存在的Firehose文件路径,手动执行函数。如果手动执行能成功把数据同步到ES,说明问题出在S3触发环节;如果手动执行失败,那先解决Lambda本身的逻辑或权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:26:10