在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
相关产品推荐
相关产品推荐

