如何将AWS S3中近期新增文件的名称同步录入DynamoDB
S3新增文件名同步至DynamoDB实现思路
最优方案:事件驱动架构,天然规避历史文件处理
- 不需要全量扫描S3桶做比对,仅在新文件上传完成时触发处理逻辑,从根源上跳过所有存量历史文件,实现成本和运行效率都最高
- 具体落地步骤:
- 先创建DynamoDB表,设置主键为S3文件名(如果你的场景下同文件名会上传多个版本,可搭配文件版本号/上传时间戳作为组合主键,按需调整即可)
- 创建Lambda处理函数,核心逻辑如下:
- 解析S3事件通知的payload,提取新增文件的文件名、上传时间等你需要存入的字段
- 调用DynamoDB的
PutItem接口写入数据,建议添加ConditionExpression = attribute_not_exists(你的主键字段名)条件,确保只有主键不存在时才写入,避免极端场景下事件重复触发导致的重复记录
- 进入S3控制台bucket1的配置页,添加事件通知规则:触发事件选择
对象创建事件(可按需细分选s3:ObjectCreated:Put/s3:ObjectCreated:Post等特定上传场景),触发目标指定为刚才创建的Lambda函数 - 配置Lambda的IAM权限:添加S3桶的读权限、DynamoDB表的写权限
可选补充:历史文件补录逻辑
如果后续有需求需要补录指定时间段的历史文件,可单独运行一次性批量任务:
- 调用S3的
list_objects_v2接口,通过时间前缀或者StartAfter参数过滤出需要补录的文件列表 - 批量调用DynamoDB的
BatchWriteItem接口写入,同样带上不存在才写入的条件判断,避免和已有的记录重复
注意事项
- 如果S3桶开启了版本控制,按需判断是否要将同一个文件的不同版本算作独立记录,调整DynamoDB主键规则即可
- 可给Lambda配置死信队列,捕获处理失败的事件,避免遗漏新增文件记录
- 如果单日文件上传量极大,建议提前给DynamoDB开启自动扩缩容,避免写入限流
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

