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

在AWS Lambda执行S3文件迁移Python代码时遇迭代错误

错误原因及修复方案

直接报错原因

source_bucket.objects是boto3的CollectionManager类型对象,本身不支持直接迭代遍历。必须调用.all()方法,才能获取桶内所有对象的可迭代集合,这就是触发TypeError的核心原因。

代码里的隐性问题

除了迭代问题,代码中还有一处语法错误:s3.object(...)应该写成s3.Object(...)(Object首字母需大写),否则会触发属性不存在的错误。

修复后的完整代码

import boto3
import json

s3 = boto3.resource('s3')

def lambda_handler(event, context):
    dest_bucket = s3.Bucket('keyan-fin-bkt')
    source_bucket = s3.Bucket('keyan-hr-bkt')
    print(dest_bucket)
    print(source_bucket)
    
    # 调用.all()获取可迭代的对象列表
    for obj in source_bucket.objects.all(): 
        dest_key = obj.key
        # 修正Object首字母大写的问题
        s3.Object(dest_bucket.name, dest_key).copy_from(
            Copysource={'Bucket': obj.bucket_name, 'Key': obj.key}
        )

额外注意事项

  • 若源桶内对象数量较多,建议使用分页机制(比如source_bucket.objects.paginate()),避免一次性加载大量对象导致Lambda内存溢出。
  • 确保Lambda执行角色拥有以下权限:源桶的s3:ListBucket和s3:GetObject权限,目标桶的s3:PutObject权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:20:18