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

求基于最后修改时间重命名S3文件并复制的Lambda函数实现

实现带最后修改时间重命名的S3文件自动复制Lambda函数

核心逻辑说明

无需将文件下载到本地再上传,直接通过S3的copy_object接口完成跨桶复制,同时利用源文件的LastModified属性生成新文件名,全程在云端完成,避免本地操作的开销。

完整Python代码实现

import boto3
from datetime import datetime

# 替换为你的源桶和目标桶名称
SOURCE_BUCKET = "your-source-bucket"
TARGET_BUCKET = "your-target-bucket"
# 可选:如果只处理特定前缀的文件,这里设置前缀,比如"input/"
SOURCE_PREFIX = ""
TARGET_PREFIX = ""

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # 从S3触发事件中获取源对象信息
    for record in event['Records']:
        source_key = record['s3']['object']['key']
        
        # 过滤特定前缀的文件(如果需要)
        if SOURCE_PREFIX and not source_key.startswith(SOURCE_PREFIX):
            continue
            
        # 获取源对象的元数据,包括LastModified时间
        response = s3.head_object(Bucket=SOURCE_BUCKET, Key=source_key)
        last_modified = response['LastModified']
        
        # 格式化时间戳,比如转为"YYYYMMDD_HHMMSS"格式,可根据需求调整
        timestamp = last_modified.strftime("%Y%m%d_%H%M%S")
        
        # 提取原文件名和扩展名,生成新文件名
        file_name = source_key.split('/')[-1]
        if '.' in file_name:
            name_part, ext_part = file_name.rsplit('.', 1)
            new_file_name = f"{name_part}_{timestamp}.{ext_part}"
        else:
            new_file_name = f"{file_name}_{timestamp}"
        
        # 构造目标键(包含前缀)
        target_key = f"{TARGET_PREFIX}{new_file_name}" if TARGET_PREFIX else new_file_name
        
        # 执行跨桶复制
        try:
            s3.copy_object(
                Bucket=TARGET_BUCKET,
                Key=target_key,
                CopySource={'Bucket': SOURCE_BUCKET, 'Key': source_key}
            )
            print(f"成功复制并重命名文件:{source_key} -> {target_key}")
        except Exception as e:
            print(f"复制失败:{str(e)}")
            raise e

关键配置步骤

  1. IAM权限配置:给Lambda角色添加以下权限(可通过IAM策略编辑器生成):

    • s3:GetObject(源桶)
    • s3:PutObject(目标桶)
    • s3:ListBucket(源桶,用于事件触发和元数据读取)
    • logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents(CloudWatch日志权限,用于排查问题)
  2. S3触发配置:

    • 进入源S3桶的“属性”->“事件通知”
    • 添加新通知,选择“所有对象创建事件”,指定前缀(如果需要),目标选择你的Lambda函数
  3. 时间格式自定义:代码中的strftime("%Y%m%d_%H%M%S")可以根据需求修改,比如改为"%Y-%m-%d_%H-%M-%S"或者只保留日期部分"%Y%m%d"

测试建议

  • 手动上传一个测试文件到源桶的指定路径
  • 查看CloudWatch日志确认Lambda执行状态
  • 检查目标桶是否出现带时间戳的重命名文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:50:10