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

AWS新手求助:S3新增对象触发Rekognition分析的Lambda实现

如何在Lambda中获取S3新对象名称并调用Rekognition分析

Hey there! I see you're getting started with AWS and trying to hook up S3 object creation events to Rekognition via Lambda—great use case! Let me break down how to get the S3 object name and put it all together properly.

核心要点:从Lambda触发事件中提取对象信息

当S3触发Lambda时,Lambda的event参数会包含所有触发事件的详细数据,其中就包括新创建对象的存储桶名称和对象Key。你不需要遍历整个存储桶(这既低效又没必要),直接从事件结构中提取即可。

完整的Lambda Handler代码示例

这里是修正并完善后的代码,包含对象信息提取、Rekognition调用和错误处理:

import boto3
import urllib.parse

# 初始化Rekognition客户端(建议在handler外初始化,提升性能)
rekognition_client = boto3.client('rekognition')

def lambda_handler(event, context):
    # 从S3触发事件中提取第一条记录(如果批量触发会有多条,这里取第一条示例)
    s3_record = event['Records'][0]['s3']
    
    # 获取存储桶名称
    bucket_name = s3_record['bucket']['name']
    
    # 获取对象Key:注意S3会对特殊字符(如空格、中文)进行URL编码,需要解码
    object_key = urllib.parse.unquote_plus(s3_record['object']['key'], encoding='utf-8')
    
    print(f"开始处理对象:{object_key}(存储桶:{bucket_name})")
    
    # 调用Rekognition进行分析(这里以检测图像标签为例,你可以换成其他API)
    try:
        rekognition_response = rekognition_client.detect_labels(
            Image={
                'S3Object': {
                    'Bucket': bucket_name,
                    'Name': object_key
                }
            },
            MaxLabels=10,  # 最多返回10个标签
            MinConfidence=70  # 只返回置信度≥70%的标签
        )
        
        # 处理分析结果:提取标签名称
        detected_labels = [label['Name'] for label in rekognition_response['Labels']]
        print(f"检测到标签:{detected_labels}")
        
        # 这里可以添加后续逻辑,比如把结果存入DynamoDB、发送SNS通知等
        
        return {
            'statusCode': 200,
            'body': f"成功处理对象 {object_key},检测到标签:{detected_labels}"
        }
    except Exception as e:
        print(f"处理对象 {object_key} 时出错:{str(e)}")
        raise e

关键细节说明

  • 对象Key解码:S3会对包含空格、中文或特殊字符的对象Key进行URL编码(比如空格变成%20),所以必须用urllib.parse.unquote_plus解码才能得到原始的对象名称。
  • 客户端初始化:把boto3.client放在handler函数外面,Lambda会复用这个客户端连接,提升函数执行效率。
  • 权限配置:确保Lambda的IAM角色拥有以下权限:
    • S3读取权限(允许访问触发事件的存储桶)
    • Rekognition调用权限(允许调用detect_labels或你需要的其他API)
    • Lambda基础执行权限(允许写入CloudWatch日志)

额外配置提示

别忘了在S3存储桶的事件通知中配置Lambda触发:

  • 选择“所有对象创建事件”(或特定前缀/后缀的事件,比如只处理.jpg/.png图像)
  • 关联你创建的Lambda函数

内容的提问来源于stack exchange,提问作者H.Dai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:19:40