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

如何用Python编写的AWS Lambda函数实现S3文件夹移动/重命名?

用Python编写AWS Lambda函数重命名S3“文件夹”

核心原理

S3本身不存在实际的文件夹结构,所谓的“文件夹”只是对象Key中的前缀。因此重命名文件夹本质是:

  • 遍历所有Key前缀为原文件夹路径的对象
  • 将每个对象复制到新的前缀路径下
  • 删除原对象

Lambda函数代码示例

import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # 配置参数
    source_bucket = 'your-bucket-name'
    old_prefix = 'folder/'
    new_prefix = 'renamedfolder/'
    
    # 分页列出所有原前缀下的对象
    paginator = s3.get_paginator('list_objects_v2')
    page_iterator = paginator.paginate(Bucket=source_bucket, Prefix=old_prefix)
    
    for page in page_iterator:
        if 'Contents' not in page:
            continue
        
        for obj in page['Contents']:
            old_key = obj['Key']
            # 跳过S3控制台创建的空文件夹标记(零大小对象)
            if old_key == old_prefix:
                continue
            
            # 生成新对象Key:替换前缀
            new_key = old_key.replace(old_prefix, new_prefix, 1)
            
            # 复制对象到新路径
            copy_source = {'Bucket': source_bucket, 'Key': old_key}
            s3.copy_object(
                Bucket=source_bucket,
                Key=new_key,
                CopySource=copy_source
            )
            
            # 删除原对象
            s3.delete_object(Bucket=source_bucket, Key=old_key)
    
    return {
        'statusCode': 200,
        'body': f"已成功将S3前缀 '{old_prefix}' 重命名为 '{new_prefix}'"
    }

关键注意事项

  • 权限配置:Lambda执行角色需拥有s3:ListBucket、s3:GetObject、s3:PutObject、s3:DeleteObject权限
  • 大数量对象处理:当文件夹下对象超过1000个时,必须使用分页器paginator遍历所有对象,避免单次请求数量限制
  • 空文件夹处理:代码默认跳过S3控制台创建的空文件夹标记(Key为folder/的零大小对象),可根据需求添加删除逻辑
  • 跨桶移动:若需跨桶移动,只需修改copy_source中的Bucket为目标桶,并确保角色拥有跨桶操作权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:12:33