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

AWS Lambda无法解析S3事件获取文件key值的技术求助

问题

在S3对象创建触发的AWS Lambda调用中,我获取到的event是dict类型对象,想要打印映射到"key"的文件名,但无法解析event获取该值。尝试使用event['Records']['object']['key']无效,转换JSON时出现索引错误。以下是日志输出和测试代码,请求指导正确的解析方法:

日志输出

2023-08-16T23:14:08.661+05:00  <class 'dict'>

2023-08-16T23:14:08.661+05:00   {

2023-08-16T23:14:08.661+05:00   "Records": [

2023-08-16T23:14:08.661+05:00   {

2023-08-16T23:14:08.661+05:00   "eventVersion": "2.1",

2023-08-16T23:14:08.661+05:00   "eventSource": "aws:s3",

2023-08-16T23:14:08.661+05:00   "awsRegion": "us-east-1",

2023-08-16T23:14:08.661+05:00   "eventTime": "2023-08-16T18:14:07.433Z",

2023-08-16T23:14:08.661+05:00   "eventName": "ObjectCreated:Put",

2023-08-16T23:14:08.661+05:00   "userIdentity": {

2023-08-16T23:14:08.661+05:00   "principalId": "AWS:AIDAXVFYRQT5SCZ52T3IA"

2023-08-16T23:14:08.661+05:00   },

2023-08-16T23:14:08.661+05:00   "requestParameters": {

2023-08-16T23:14:08.661+05:00   "sourceIPAddress": "58.65.198.81"

2023-08-16T23:14:08.661+05:00   },

2023-08-16T23:14:08.661+05:00   "responseElements": {

2023-08-16T23:14:08.661+05:00   "x-amz-request-id": "K1F5VBSS8ZZFVXZZ",

2023-08-16T23:14:08.661+05:00   "x-amz-id-2": "UQ4qg1t7b0cQKHH3xmhykrqz2Khi0ilIkhV+4rl2zID5U640uw8QHtqGevN/E8FwvW/Mz82C3uILFYeDaJdma8u866k+eIXT"

2023-08-16T23:14:08.661+05:00   },

2023-08-16T23:14:08.661+05:00   "s3": {

2023-08-16T23:14:08.661+05:00   "s3SchemaVersion": "1.0",

2023-08-16T23:14:08.661+05:00   "configurationId": "4c0adbad-3f5a-4bae-b5d4-0d10bce6c058",

2023-08-16T23:14:08.661+05:00   "bucket": {

2023-08-16T23:14:08.661+05:00   "name": "os-lab-demo",

2023-08-16T23:14:08.661+05:00   "ownerIdentity": {

2023-08-16T23:14:08.661+05:00   "principalId": "A1EIYWRSGRMZ3E"

2023-08-16T23:14:08.661+05:00   },

2023-08-16T23:14:08.661+05:00   "arn": "arn:aws:s3:::os-lab-demo"

2023-08-16T23:14:08.661+05:00   },

2023-08-16T23:14:08.661+05:00   "object": {

2023-08-16T23:14:08.661+05:00   "key": "ertugul.jpg",

2023-08-16T23:14:08.661+05:00   "size": 88458,

2023-08-16T23:14:08.661+05:00   "eTag": "92efc540bb3abee495c43e65a3f39697",

2023-08-16T23:14:08.661+05:00   "versionId": "r6hdxaF.0QmuOdPXnIiJt9HP0R3GLnr2",

2023-08-16T23:14:08.661+05:00   "sequencer": "0064DD11EF5F32C4EC"

2023-08-16T23:14:08.661+05:00   }

2023-08-16T23:14:08.661+05:00   }

2023-08-16T23:14:08.661+05:00   }

2023-08-16T23:14:08.661+05:00   ]

2023-08-16T23:14:08.661+05:00   }

测试代码

import boto3
import json
client = boto3.client('s3')
def lambda_handler(event, context):
    print (type(event))
    print (json.dumps(event, indent= 4))
    print (event['key'])

正确解析方法

你之前的解析路径存在两个错误:

  1. Records是列表类型,不能直接通过字典键访问,必须先通过索引[0]获取列表中的第一条事件记录(单文件上传场景下通常只有一条记录)。
  2. 对象的key字段嵌套在s3节点下,并非直接在事件记录的根节点。

修正后的代码如下:

import boto3
import json
client = boto3.client('s3')
def lambda_handler(event, context):
    print(type(event))
    print(json.dumps(event, indent=4))
    # 正确解析文件名的路径
    file_key = event['Records'][0]['s3']['object']['key']
    print(f"文件名:{file_key}")

如果是批量操作触发的Lambda,可能存在多条事件记录,建议遍历Records列表处理所有文件:

import boto3
import json
client = boto3.client('s3')
def lambda_handler(event, context):
    print(type(event))
    print(json.dumps(event, indent=4))
    # 遍历所有事件记录
    for record in event['Records']:
        file_key = record['s3']['object']['key']
        print(f"文件名:{file_key}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:20:03