首页 > 解决方案 > 使用 Lambda 和 BOTO3 在存储桶之间复制文件的问题

问题描述

我的任务是将上传的 .zip 或 .tar 对象从存储桶 A 复制到存储桶 B,但是一旦文件似乎超过大约 17 MB,就会出现问题,lambda 函数似乎没有启动,我没有确定为什么。我已经测试了从 1B 到 16MB 的大小并且似乎运行得很好,但是一旦文件超过 17 MB,它似乎就没有运行或者我猜超时了。对正在发生的事情的想法?

我尝试使用 copy_object 和托管传输(已注释掉),但它们都以相同的大小失败。想法?

建议?

import re
import boto3
import json
import os

def lambda_handler(event, context):
    
    s3_client = boto3.client('s3')
    s3 = boto3.resource('s3')
    regex = re.compile('[@_!#$%^& *()<>?|}{~:]')
    max_file_size = 30000000000

    for record in event['Records']:
        startTime = record['eventTime']
        source_bucket_name = record['s3']['bucket']['name']
        source_object_key = record['s3']['object']['key']
        source_object_size = record['s3']['object']['size']

    copy_source={
        'Bucket': source_bucket_name,
        'Key': source_object_key
    }

    source_object_base_key = os.path.basename(source_object_key)

    if (source_object_size > max_file_size or regex.search(source_object_key)):
        print("Object is " + str(source_object_size))
        print("Object should be moved to failed directory")
        s3_client.copy_object(CopySource=copy_source, Bucket=fail_bucket, Key=source_object_base_key)
        s3_client.delete_object(Bucket=source_bucket_name, Key=source_object_key)
#        s3.meta.client.copy(copy_source, fail_bucket, source_object_base_key)
#        s3_client.delete_object(Bucket=source_bucket_name, Key=source_object_key)
        return {
            'statusCode': 422,
            'body': json.dumps('File is either too big or invalid')
        }
    else:

        print("Object is " + str(source_object_size))
        s3_client.copy_object(CopySource=copy_source, Bucket=success_bucket, Key=source_object_base_key)
        s3_client.delete_object(Bucket=source_bucket_name, Key=source_object_key)
#        s3.meta.client.copy(copy_source, success_bucket, source_object_base_key)
#        s3_client.delete_object(Bucket=source_bucket_name, Key=source_object_key)
        return {
        'statusCode': 200,
        'body': json.dumps("File is valid ")
        }

标签: python-3.xamazon-web-servicesamazon-s3aws-lambda

解决方案


推荐阅读