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

CDK Python中如何捕获aws s3 cp命令触发的S3事件?

解决方案

首先明确aws s3 cp触发的S3事件规则:

  • 上传文件小于8MB时,默认触发OBJECT_CREATED_PUT事件
  • 上传文件大于等于8MB时,aws cli默认开启分片上传,完成后触发OBJECT_CREATED_COMPLETE_MULTIPART_UPLOAD事件

你当前已经配置了这两类事件,理论上可以覆盖所有aws s3 cp的上传场景,无法捕获事件可按以下顺序排查:

1. 确认Lambda调用权限配置正确

S3触发Lambda需要Lambda侧配置基于资源的权限,允许对应S3桶调用Lambda函数。很多场景下CDK不会自动生成该权限,需要手动补充,在你的app.py中添加以下代码:

from aws_cdk import aws_iam as iam

# 补充S3调用Lambda的权限
function.add_permission(
    "allow-s3-invoke-lambda",
    principal=iam.ServicePrincipal("s3.amazonaws.com"),
    source_arn=output_s3.bucket_arn,
    action="lambda:InvokeFunction"
)

部署后可前往Lambda控制台「配置」-「权限」-「基于资源的策略」页面确认策略已生效。

2. 确认Lambda入口配置正确

你的Lambda函数代码入口为lambda_handler.py中的main函数,需要在CDK定义Lambda时将handler参数设置为lambda_handler.main,如果错误配置为其他入口(比如默认的lambda_function.lambda_handler),会导致函数无法正确接收事件参数,出现空事件输出。

3. 确认S3事件通知配置已生效

部署完成后前往S3控制台,找到对应桶的「属性」-「事件通知」板块,确认已存在对应两类事件的通知规则,且目标指向正确的Lambda函数。
如果规则不存在,可先将事件类型替换为全量创建事件临时测试:

output_s3.add_event_notification(
    _s3.EventType.OBJECT_CREATED_ALL,
    notification
)

4. 简化场景测试

先通过S3控制台直接上传小于1MB的测试文件,观察Lambda是否能正常收到事件:

  • 如果能收到:说明配置正常,可排查CLI上传时是否指定了特殊参数(比如--endpoint-url指向了非官方端点、开启了服务端加密配置不兼容等)
  • 如果不能收到:可检查桶是否有其他拦截规则(比如S3访问控制策略、桶日志配置异常等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:03