AWS Lambda用于复制S3存储桶中文件夹内的文件

时间:2017-05-30 22:47:30

标签: amazon-web-services amazon-s3 aws-lambda boto3

我想知道如何使用aws lambda(python)将文件从S3存储桶中的文件夹复制并移动到同一存储桶中的不同文件夹中?

2 个答案:

答案 0 :(得分:4)

Amazon S3中没有移动重命名命令。

相反,您可以对象复制到新名称/位置,然后删除原始对象。

使用the boto3 copy_object() command

  

创建已存储在Amazon S3中的对象的副本。

目的地可以是同一个桶或不同的桶(甚至是不同地区的桶!)。

请注意,文件夹实际上并不存在于Amazon S3中。相反,对象的名称(' Key')包含完整路径和文件名。因此,将对象移动到另一个文件夹涉及使用不同的密钥(包括路径)保存它。

答案 1 :(得分:1)

我们可以使用以下函数移动包含子文件夹和文件的整个文件夹。

目标路径中将包含子文件夹和文件,就像在源文件夹中一样。

def move_folder_in_s3(bucket,source_folder,destination_path):
    s3_bucket = boto3.resource('s3')
    my_bucket = s3_bucket.Bucket(bucket)
    s3 = boto3.client('s3')

    for object_summary in my_bucket.objects.filter(Prefix=source_folder):
       print(object_summary.key)
       copy_source = {'Bucket': bucket,'Key': object_summary.key}
       destination = destination_path + object_summary.key.split(source_folder,1)[1]
       print(destination)
       s3.copy_object(CopySource=copy_source, Bucket=bucket, Key=destination)

可以使用删除功能从源中删除文件夹。

def delete_folder_in_s3(bucket,folder):
    s3_bucket = boto3.resource('s3')
    my_bucket = s3_bucket.Bucket(bucket)
    s3 = boto3.client('s3')

    for object_summary in my_bucket.objects.filter(Prefix=folder):
        print(object_summary.key)
        s3.delete_object(Bucket = bucket, Key = object_summary.key)
    s3.put_object(Bucket=bucket, Key=(folder+'/'))